1,Eureka 闭源了,但是我们可以通过zookeeper实现注册中心的功能。
zookeeper 是一个分布式协调工具,可以实现服务的注册和发现,配置中心,注册中心,消息中间件的功能
2,工具准备
windows 版本的zookeeper-3.3.6,以及客户端查看工具ZooInspector
3,打开zookeeper 服务
4,配置需要注册到zookeeper 上的服务,maven 依赖
member 服务:
###订单服务的端口号
server:
port: 8000
###服务别名----服务注册到注册中心名称
spring:
application:
name: zk-member
cloud:
zookeeper:
connect-string: 127.0.0.1:2181
order服务:
###订单服务的端口号
server:
port: 8001
###服务别名----服务注册到注册中心名称
spring:
application:
name: zk-order
cloud:
zookeeper:
connect-string: 127.0.0.1:2181
启动类上加上注解:@SpringBootApplication 代表如果注册中心不是Eureka 的,比如consul,zookeepr 或者其他,可以用这个去注册,(springboot2.0 发现不加这个也可以)
member的启动类:
@SpringBootApplication @EnableDiscoveryClient public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } // 注册到spring容器中 @Bean // 开启负载均衡 @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); } }
order的启动类:
@SpringBootApplication @EnableDiscoveryClient public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }
正常启动,就会发现,zookeeper 上就会有这几个节点了,zookeeper 实现注册中心创建的是临时节点
可以看到service 服务下面有zk-member 和 zk-order 节点,zk-order 节点实现了集群
5,zookeeper_member 服务去访问zookeeper_order 服务还是通过RestTemplate 的方式去访问,RestTemplate 是依赖Ribbon的,所以是具有客户端负载均衡功能的,zk_order 有集群,所以会通过轮询的方式去访问。
zookeep_member: 访问者
@RestController public class IndexMemberController { // 封装了http方法,显得更加的优雅 @Autowired private RestTemplate restTemplate; @RequestMapping("/getOrder") public String getOrder() { // url会在eureka注册中心上通过别名进行查找,restTemplate通过别名来找服务,是依赖ribbon,所以RestTemplate初始化要加上@LoadBalanced String orderUrl = "http://zk-order/getOrder"; String res = restTemplate.getForObject(orderUrl, String.class); System.out.println("rpc远程调用服务成功"); return res; } }
zookeep_order: 被访问者
@RestController public class IndexOrderController { @Value("${server.port}") private String port; @RequestMapping("/getOrder") public String getOrder() { return "获得订单成功,正在访问的端口号是: " + port; } }
结果:达到轮询效果
获得订单成功,正在访问的端口号是: 8002
获得订单成功,正在访问的端口号是: 8001