教你一招如何使用几行代码实现zookeeper作为springcloud的服务注册中心
如果沒有安裝過zookeeper,請移步
zookeeper的單機安裝 - 詳細教程:https://blog.csdn.net/Kevinnsm/article/details/116134397
文章目錄
- 如果沒有安裝過zookeeper,請移步
- 一、框架搭建
- 1、創建父工程
- 2、創建服務提供子模塊(provider-ZKpayment-module)
- 3、創建服務消費子模塊(consumer-ZKpayment-module)
- 二、代碼準備
- 1、父工程pom
- 2、服務提供子模塊pom
- 3、消費服務子模塊pom
- 4、提供服務模塊和消費模塊服務模塊啟動類
- 5、提供服務模塊和消費模塊服務模塊application.yml文件
- 6、提供服務模塊和消費模塊服務模塊controller代碼
- 7、RestTemplate詳解及其配置
- 三、測試
- 四、靈魂拷問?為什么需要注冊中心
一、框架搭建
1、創建父工程
刪除src目錄
2、創建服務提供子模塊(provider-ZKpayment-module)
3、創建服務消費子模塊(consumer-ZKpayment-module)
二、代碼準備
1、父工程pom
<?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"><modelVersion>4.0.0</modelVersion><groupId>com.cloud</groupId><artifactId>springcloud_all</artifactId><version>1.0-SNAPSHOT</version><modules><module>provider-ZKpayment-module</module><module>consumer-Zkpyament-module</module><module>provider-ZKpayment-module</module></modules><packaging>pom</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><junit.version>4.13</junit.version><log4j.version>1.2.17</log4j.version><lombok.version>1.16.18</lombok.version><mysql.version>8.0.19</mysql.version><druid.version>1.2.4</druid.version><mybatis.spring.boot.version>2.1.4</mybatis.spring.boot.version><druid.spring.boot.version>1.2.4</druid.spring.boot.version><springfox-swagger-ui.version>2.9.2</springfox-swagger-ui.version><springfox-swagger2.version>2.9.2</springfox-swagger2.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.4.3</version><type>pom</type><scope>import</scope></dependency><!-- spring-cloud 2020.0.2--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>2020.0.2</version><type>pom</type><scope>import</scope></dependency><!-- spring-cloud alibaba--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2021.1</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>${druid.version}</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.spring.boot.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>${druid.spring.boot.version}</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>${springfox-swagger-ui.version}</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>${springfox-swagger2.version}</version></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><fork>true</fork><addResources>true</addResources></configuration></plugin></plugins></build> </project>2、服務提供子模塊pom
<?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>springcloud_all</artifactId><groupId>com.cloud</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><groupId>com.provider</groupId><artifactId>provider-ZKpayment-module</artifactId><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.common</groupId><artifactId>common-module</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zookeeper-discovery</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies></project>3、消費服務子模塊pom
<?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>springcloud_all</artifactId><groupId>com.cloud</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><groupId>com.consumer</groupId><artifactId>consumer-Zkpyament-module</artifactId><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.common</groupId><artifactId>common-module</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zookeeper-discovery</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies></project>4、提供服務模塊和消費模塊服務模塊啟動類
@SpringBootApplication @EnableDiscoveryClient public class ProviderZKApplication {public static void main(String[] args) {SpringApplication.run(ProviderZKApplication.class,args);} } @SpringBootApplication @EnableDiscoveryClient public class ConsumerZKApplication {public static void main(String[] args) {SpringApplication.run(ConsumerZKApplication.class, args);} }@EnableDiscoveryClient注解的作用:能夠讓注冊中心能夠發現,掃描到微服務。
5、提供服務模塊和消費模塊服務模塊application.yml文件
server:port: 8004spring:application:name: provider-ZKpayment-modulecloud:zookeeper:connect-string: 8.140.37.103:2181 server:port: 80spring:application:name: consumer-ZKpayment-modulecloud:zookeeper:connect-string: 8.140.37.103:21816、提供服務模塊和消費模塊服務模塊controller代碼
@RestController @Slf4j public class ProviderController {@Value("${server.port}")private String serverPort;@GetMapping(value = "/provider/test")public String test() {return "提供服務模塊服務端口號為:" + serverPort + "《--------------》" + UUID.randomUUID().toString();} } @RestController @Slf4j public class ConsumerController {private static final String URL = "http://provider-ZKpayment-module";@Resourceprivate RestTemplate restTemplate;@GetMapping(value = "/consumer/test")public String getData() {return restTemplate.getForObject(URL + "/provider/test", String.class);} }7、RestTemplate詳解及其配置
RestTemplate是spring封裝的一個服務端遠程HTTP請求工具,支持常見的Rest請求(get、post等)
簡單了說就是用來遠程調用的,因為你訂單模塊是一個服務,消費模塊又是一個單獨的服務,兩個服務端的端口號要進行交互,所以就有了RestTemplate
當然要注入RestTemplate(注意是在消費模塊配置,因為是消費服務調用提供服務模塊)
三、測試
啟動提供服務模塊和消費服務模塊(注意一定要開啟zookeeper服務,順便進入zookeeper客戶端)
在zookeeper客戶端進行查看
接口測試調用
至此便成功了!
四、靈魂拷問?為什么需要注冊中心
我們在微服務中首先需要面對的問題是服務之間如何進行通信呢?在單體架構中,我們只要將服務的接口暴露,然后通過http請求即可,微服務當然也可以這樣。
問題是我們請求的url是固定的,單體服務為我們還可以很快的修改;一旦有大量的服務那就需要我們手動維護服務接口,配置負載均衡;服務宕機后,如何及時下線呢?
總而言之注冊中心必不可少(至少當前時代是這樣)。
總結
以上是生活随笔為你收集整理的教你一招如何使用几行代码实现zookeeper作为springcloud的服务注册中心的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 呕心沥血为小白总结13个学习网站-错过了
- 下一篇: 机器人“铁手”可以保护工厂工人免受伤害