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