服务端
引入依赖
pom.xml增加zookeeper依赖:
<!-- 使用zookeeper进行服务注册发现. -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
配置文件
增加当前应用注册的服务名及zookeeper配置信息。
spring:
application:
name: media
############## Service Discovery ############## spring:
cloud: zookeeper: # ZooKeeper的连接字符串,如果是集群,逗号分隔节点,格式:ip:port[,ip2:port2,.....] connectString: 192.168.2.226:2181
启用服务注册发现
在Spring Boot项目的启动类增加注解
@EnableDiscoveryClient
消费端
引入依赖
pom.xml增加zookeeper和feign依赖:
<!-- 使用zookeeper进行服务注册发现. -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
<!-- Feign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
Feign使用http协议进行请求。
配置文件
增加zookeeper配置信息及是否注册当前应用到zookeeper(默认注册)。
############## Service Discovery ############## spring:
cloud: zookeeper: # ZooKeeper的连接字符串,如果是集群,逗号分隔节点,格式:ip:port[,ip2:port2,.....] connectString: 192.168.2.226:2181
#消费端不向zookeeper注册,如果当前服务同时对外提供服务,不用写以下配置!
discovery:
register: false
启用服务注册发现
在Spring Boot项目的启动类增加注解
@EnableDiscoveryClient
@EnableFeignClients
编写消费端类
示例:
/** * Feign文件上传客户端. */ @Component @FeignClient(value = "sso") public interface UserClient { /** * 根据用户Id获取用户详情. * * @param userIds 用户id列表. * @return 用户详情列表. * @author chengyuebin */ @PostMapping("/itsm/system/sso/user/queryUserById") Map<String, Object> userDetail(@RequestParam("userIds") List<String> userIds); }
@FeignClient的value值对应服务端的spring.application.name值。请求的路径为服务端端口号之后的路径。
使用Feign发起请求
示例:
首先注入消费端的类。
@Autowired private UserClient userClient;
发起请求。
Map<String, Object> userInterfaceMap = userClient.userDetail(userIds);