Spring cloud集成了zookeeper得使用,通过服务端注册服务,客户端发现服务并使用轮询实现负载均衡,下面看具体的使用方法:
服务端的实现
1、pom文件需引入以下组件
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
2、application.yml配置文件内容:指定应用名称,以便在客户端调用服务使用
spring:
application:
name: zkserver
3、main方法的实现:
@Configuration @EnableAutoConfiguration @EnableDiscoveryClient @RestController public class ZkServerApp { @RequestMapping("/user") public Map<String,Object> info() { //模拟返回一个用户信息 Map<String, Object> map = new HashMap<>(); map.put("name", "john"); map.put("age", 22); return map; } public static void main(String[] args) { SpringApplication.run(ZkServerApp.class, args); } }
4、服务端启动:
默认端口为8080,可以通过—server.port指定启动端口,在本例中启动8080,8081,8082三个服务端口提供服务调用。
客户端的实现
1、pom文件需引入以下组件
客户端的依赖引入通服务端一致即可,同上
2、application.yml配置文件内容:
指定启动端口为8888,防止端口冲突
server:
port: 8888
同时将本服务的注册发现设置为false
spring:
cloud:
zookeeper:
discovery:
register: false
3、main方法的实现:
@SpringBootApplication @RestController @EnableDiscoveryClient public class ZkClientApp { //获取服务端的应用名称 @Value("${spring.application.name:zkserver}") private String appName; @Bean @LoadBalanced RestTemplate loadBalancedRestTemplate() { return new RestTemplate(); } @Autowired LoadBalancerClient loadBalance; @Autowired private RestTemplate rt; @RequestMapping("/user") public String getUser() { System.out.println(loadBalance.choose(appName)); //打印当前调用的服务端地址 @SuppressWarnings("unchecked") Map<String, Object> user = rt.getForObject("http://" + this.appName + "/user", Map.class); return user.toString(); } public static void main(String[] args) { SpringApplication.run(ZkClientApp.class, args); } }
4、启动客户端,访问 http://localhost:8888/user,页面出现如下结果
{name=john, age=22},多次调用后控制台打印如下信息:
RibbonServer{serviceId='zkserver', server=windows10.microdone.cn:8080, secure=false, metadata={}}
RibbonServer{serviceId='zkserver', server=windows10.microdone.cn:8081, secure=false, metadata={}}
RibbonServer{serviceId='zkserver', server=windows10.microdone.cn:8082, secure=false, metadata={}}
RibbonServer{serviceId='zkserver', server=windows10.microdone.cn:8080, secure=false, metadata={}}
RibbonServer{serviceId='zkserver', server=windows10.microdone.cn:8081, secure=false, metadata={}}
RibbonServer{serviceId='zkserver', server=windows10.microdone.cn:8082, secure=false, metadata={}}
RibbonServer{serviceId='zkserver', server=windows10.microdone.cn:8080, secure=false, metadata={}}
RibbonServer{serviceId='zkserver', server=windows10.microdone.cn:8081, secure=false, metadata={}}
RibbonServer{serviceId='zkserver', server=windows10.microdone.cn:8082, secure=false, metadata={}}