注冊中心 zookeeper:
- zookeeper是一個分布式協調工具,可以實現注冊中心功能
- 關閉Linux服務器防火牆后啟動zookeeper服務器
- zookeeper服務器取代Eureka服務器,zk作為服務注冊中心
-
1、支付服務注冊進zookeeper
-
1.1 創建module cloud-provider-payment8004
1.2 引入zookeeper依賴,代替eureka
-
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>cloud2020</artifactId> <groupId>com.atguigu.springcloud</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>cloud-provider-payment8004</artifactId> <dependencies> <!--springboot整合zookeeper客戶端--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId> </dependency> <!--Springboot整合web組件--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--引入自定義的api通用包,可以使用payment支付Entity--> <dependency> <groupId>com.atguigu.springcloud</groupId> <artifactId>cloud-api-commons</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> </project>
1.3 寫application.yml
-
#8004表示注冊到zookeeper服務器的支付服務提供者端口號 server: port: 8004 #服務別名----注冊zookeeper到注冊中心名稱 spring: application: name: cloud-provider-payment cloud: zookeeper: connect-string: 192.168.88.131:2181
1.4主啟動
-
package com.atguigu.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient //該注解用於想使用consul或者zookeeper作為注冊中心時注冊服務 public class PaymentMain8004 { public static void main(String[] args) { SpringApplication.run(PaymentMain8004.class,args); } }
1.5業務類
-
package com.atguigu.springcloud.controller; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.UUID; @RestController @Slf4j public class PaymentController { @Value("${server.port}") private String serverPort; @GetMapping(value = "/payment/zk") public String paymentzk(){ return "springcloud with zookeeper:"+serverPort+"\t"+ UUID.randomUUID().toString(); } }
1.6
./zkCli.sh
啟動客戶端,然后啟動8004注冊進zookeeper - 會發現啟動類報錯了,這是環境的問題。引入zookeeper依賴自帶3.5.3 beta版,而我使用的是3.4.14,版本沖突了。
解決辦法:修改pom依賴,排除3.5.3版本的,並引入3.4.14版本的
PS: 新版本的zookeeper還會遇到slf4j和log4j包沖突的問題,此時在zookeeper去掉slf4j的依賴
這樣,微服務提供者 支付模塊就入駐進zookeeper服務器
-
1.7 驗證測試
java程序在windows系統,服務注冊中心在centos系統,說明程序調試成功。
-
繼續深挖測試:
微服務作為一個znode節點放到zookeeper服務器上,這一大串就是在zookeeper上的基本信息的json串,就能看到zookeeper上8004微服務提供者的相關信息
zookeeper作為服務注冊中心,微服務作為節點注冊進來,那這個節點是臨時還是持久?
關於Eureka我們知道,偶爾有一時刻服務提供者出了點故障,Eureka會開啟自我保護機制,微服務不會被刪除,那現在關閉8004試一下zookeeper中的服務會有什么變化嗎可以看出,Zookeeper也是在一定時間內,不會剔除服務,超時才剔除,所以zookeeper具備的服務節點是臨時的。當你再啟動8004時,zookeeper還會自動監聽服務狀態,但是流水號是一個新的流水號。
2.訂單服務注冊進zookeeper
2.1 創建module cloud-consumerzk-order80
2.2 pom.xml
-
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>cloud2020</artifactId> <groupId>com.atguigu.springcloud</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>cloud-consumerzk-order80</artifactId> <dependencies> <!--springboot整合zookeeper客戶端--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId> <!--排除自帶的zookeeper--> <exclusions> <exclusion> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> </exclusion> </exclusions> </dependency> <!--添加zookeeper3.4.14版本--> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.14</version> <exclusions> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> <!--springboot整合web組件--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> </project>
2.5 業務類