SpringCloud集成zookeeper實現(xiàn)服務(wù)注冊并訪問功能
SpringCloud整合zookeeper實現(xiàn)服務(wù)注冊
前言:
zookeeper是一個分布式協(xié)調(diào)工具,可以實現(xiàn)注冊中心功能。換而言之,zookeeper和eureka一樣,是用于充當(dāng)服務(wù)注冊功能服務(wù)器的一個springcloud插件。而隨著eureka停止更新,zookeeper也成為了市面大量使用的替代eureka的一門技術(shù),為分布式項目實現(xiàn)注冊中心的功能。
一.環(huán)境準(zhǔn)備
1.linux環(huán)境下的zookeeper環(huán)境
如果還未配置zookeeper環(huán)境的同學(xué)可以移步我的另外一篇文章喔,那里對如何在Linux環(huán)境下安裝zookeeper有著很詳細(xì)的介紹~
linux上安裝zookeeper 啟動和關(guān)閉的教程
2.一個簡單的springcloud父項目環(huán)境
在cloud2022項目中的pom.xml導(dǎo)入springcloud依賴和一些常規(guī)依賴
<?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.canrioyuan</groupId> <artifactId>cloud2022</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <!--父工程的打包方式必須為pom:表示父工程不寫代碼,只在父工程的pom.xml文件中使用配置版本, 子工程的打包方式才是war:發(fā)布在服務(wù)器上的工程,如網(wǎng)站或者是服務(wù),maven會自動幫助我們指明這個工程為web工程 jar:默認(rèn)打程jar工程,相當(dāng)于打包--> <modules> <module>cloud-provider-payment8001</module> <module>cloud-consumer-order80</module> <module>cloud-api-commons</module> <module>cloud-eureka-server7001</module> <module>cloud-eureka-server7002</module> <module>cloud-provider-payment8002</module> <module>cloud-provider-payment8004</module> </modules> <!-- 統(tǒng)一管理jar包版本 --> <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.12</junit.version> <log4j.version>1.2.17</log4j.version> <lombok.version>1.18.24</lombok.version> <mysql.version>8.0.21</mysql.version> <druid.version>1.1.21</druid.version> <mybatis-plus.spring.boot.version>3.5.1</mybatis-plus.spring.boot.version> </properties> <!-- 子模塊繼承之后,提供作用:鎖定版本+子module不用寫groupId和version --> <dependencyManagement> <!--只是聲明依賴,并不實現(xiàn)引入--> <dependencies> <!--spring boot 2.2.2--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.2.2.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <!--spring cloud Hoxton.SR1--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.SR1</version> <type>pom</type> <scope>import</scope> </dependency> <!--spring cloud alibaba 2.1.0.RELEASE--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.1.0.RELEASE</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-spring-boot-starter</artifactId> <version>${druid.version}</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>${mybatis-plus.spring.boot.version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> <optional>true</optional> </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>
二.編寫服務(wù)提供者模塊
1.在cloud2022下創(chuàng)建一個cloud-provider-payment8004作為服務(wù)提供者
2.在pom.xml文件中添加常規(guī)依賴和zookeeper、springboot整合zookeeper客戶端等依賴
<!-- SpringBoot整合Web組件 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 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> <!--導(dǎo)入符合安裝版本的zookeeper依賴--> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.7.1</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>
3.編寫application.yaml
#8004表示注冊到zookeeper服務(wù)器的支付服務(wù)提供者端口號 server: port: 8004 #服務(wù)別名----注冊zookeeper到注冊中心名稱 spring: application: name: cloud-provider-payment #連接zookeeper cloud: zookeeper: connect-string: 192.168.154.133:2181 #此處為對應(yīng)的zookeeper客戶端地址
4.編寫主啟動類PaymentMain8004
package com.canrioyuan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient //該注解用于向使用consul或者zookeeper作為注冊中心時注冊服務(wù) public class PaymentMain8004 { public static void main(String[] args){ SpringApplication.run(PaymentMain8004.class,args); } }
5.編寫PaymentController
package com.canrioyuan.controller; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.UUID; @RestController @Slf4j public class PaymentController { //獲取配置文件中端口對應(yīng)的值 @Value("${server.port}") private String serverPort; @RequestMapping(value = "/payment/zk") public String paymentzk() { return "springcloud with zookeeper: "+serverPort+"\t"+ UUID.randomUUID().toString(); } }
三.測試服務(wù)提供者模塊是否搭建成功
1.運行zookeeper的客戶端
進(jìn)入zookeeper安裝目錄下的bin目錄,啟動zookeeper服務(wù)器
[root@zookeeper1 bin]# ./zkServer.sh start
啟動zookeeper客戶端
[root@zookeeper1 bin]# zkCli.sh
啟動成功
可以看到,此時zookeeper中的節(jié)點只有l(wèi)ocks和zookeeper:
2.運行PaymentMain8004
運行成功后如下圖所示:
3.查看zookeeper中的節(jié)點
我們再一次查看zookeeper下的節(jié)點,可以看到services已經(jīng)被注冊且services下的節(jié)點即為我們application.yaml為該模塊配置的名字
4.訪問http://localhost:8004/payment/zk
出現(xiàn)如下字符串則證明搭建成功
四.編寫服務(wù)消費者模塊
1.在cloud2022下創(chuàng)建一個cloud-consumerzk-order80作為服務(wù)消費者
2.在pom.xml文件中添加常規(guī)依賴和zookeeper、springboot整合zookeeper客戶端等依賴
<dependencies> <!-- SpringBoot整合Web組件 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 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.9版本--> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.7.1</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>
3.編寫application.yaml
server: port: 80 spring: application: name: cloud-consumer-order cloud: #注冊到zookeeper地址 zookeeper: connect-string: 192.168.154.133:2181 #zookeeper環(huán)境所在的Ip地址
4.編寫主啟動類PaymentMain8004
package com.canrioyuan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class OrderZk80 { public static void main(String[] args) { SpringApplication.run(OrderZk80.class,args); } }
5.編寫配置類ApplicationContextConfig(用于注冊RestTemplate)
package com.canrioyuan.controller; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; @Configuration public class ApplicationContextConfig { /** * RestTemplate是Spring提供的用于訪問Rest服務(wù)的客戶端, * 它提供了很多可以方便訪問遠(yuǎn)程http服務(wù)的方法,這些方法可以幫助開發(fā)人員減少編寫客戶端代碼的工作量。 * @return */ @Bean //將RestTemplate注冊到容器中 /** * @LoadBalanced注解,我們在使用這個注解后,就能在調(diào)用其他微服務(wù)的時候,通過服務(wù)實例名稱就能進(jìn)行調(diào)用其他的微服務(wù), * 而不是直接把要調(diào)用的微服務(wù)的ip和端口號寫死在代碼當(dāng)中。 */ @LoadBalanced public RestTemplate getRestTemplate(){ return new RestTemplate(); } }
6.編寫OrderController
package com.canrioyuan.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; @RestController public class OrderZkController { //聲明固定的服務(wù)訪問前綴 public static final String INVOKE_URL ="http://cloud-provider-payment"; //注入容器中注冊的RestTemplate @Resource private RestTemplate restTemplate; @GetMapping(value="/consumer/payment/zk") public String PaymentInfo(){ String result = restTemplate.getForObject(INVOKE_URL+"/payment/zk", String.class); System.out.println("消費者調(diào)用支付服務(wù)_result:"+result); return result; } }
五.測試服務(wù)消費者模塊是否搭建成功
1.啟動該服務(wù)消費者模塊
2.訪問http://localhost/consumer/payment/zk
結(jié)果如下則搭建成功
至此,我們SpringCloud集成zookeeper實現(xiàn)服務(wù)注冊的教程就結(jié)束啦~
到此這篇關(guān)于SpringCloud集成zookeeper實現(xiàn)服務(wù)注冊并訪問功能的文章就介紹到這了,更多相關(guān)SpringCloud集成zookeeper內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
spring cloud gateway如何獲取請求的真實地址
這篇文章主要介紹了spring cloud gateway如何獲取請求的真實地址問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05Spring Boot 會員管理系統(tǒng)之處理文件上傳功能
Spring Boot會員管理系統(tǒng)的中,需要涉及到Spring框架,SpringMVC框架,Hibernate框架,thymeleaf模板引擎。這篇文章主要介紹了Spring Boot會員管理系統(tǒng)之處理文件上傳功能,需要的朋友可以參考下2018-03-03微服務(wù)領(lǐng)域Spring Boot自動伸縮的實現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于微服務(wù)領(lǐng)域Spring Boot自動伸縮的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用spring boot具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-10-10Springboot創(chuàng)建項目的圖文教程(idea版本)
這篇文章主要介紹了Springboot創(chuàng)建項目的圖文教程(idea版本),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06解決SpringBoot整合ElasticSearch遇到的連接問題
這篇文章主要介紹了解決SpringBoot整合ElasticSearch遇到的連接問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08SpringBoot之自定義Filter獲取請求參數(shù)與響應(yīng)結(jié)果案例詳解
這篇文章主要介紹了SpringBoot之自定義Filter獲取請求參數(shù)與響應(yīng)結(jié)果案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09