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={}}