Spring Cloud基于Zookeeper的微服务集群实现
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={}}
完整代码地址:https://github.com/hjguang/spring-cloud
推荐阅读
-
基于Docker的Consul集群实现服务发现
-
Spring Cloud下使用Feign Form实现微服务之间的文件上传
-
基于Spring Cloud的微服务落地
-
基于Spring Boot 2.0.2.RELEASE 的 Spring Cloud 速成指南 | 二. Spring Cloud 服务注册中心(Eureka Server)
-
基于Spring和Spring MVC实现可跨域访问的REST服务(转帖)
-
基于Spring和Spring MVC实现可跨域访问的REST服务(转帖)
-
Spring Cloud下基于OAUTH2认证授权的实现示例
-
Spring Cloud--实现Eureka的高可用(Eureka集群搭建)实例
-
基于Spring Boot 和Spring Cloud和Docker的微服务架构项目实战
-
基于Nacos实现Spring Cloud Gateway实现动态路由的方法