<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
zookeeper是一個分散式協調工具,可以實現註冊中心功能。換而言之,zookeeper和eureka一樣,是用於充當服務註冊功能伺服器的一個springcloud外掛。而隨著eureka停止更新,zookeeper也成為了市面大量使用的替代eureka的一門技術,為分散式專案實現註冊中心的功能。
如果還未設定zookeeper環境的同學可以移步我的另外一篇文章喔,那裡對如何在Linux環境下安裝zookeeper有著很詳細的介紹~
在cloud2022專案中的pom.xml匯入springcloud依賴和一些常規依賴
<?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:釋出在伺服器上的工程,如網站或者是服務,maven會自動幫助我們指明這個工程為web工程 jar:預設打程jar工程,相當於打包--> <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> <!-- 統一管理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> <!--只是宣告依賴,並不實現引入--> <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>
<!-- 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> <!--匯入符合安裝版本的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>
#8004表示註冊到zookeeper伺服器的支付服務提供者埠號 server: port: 8004 #服務別名----註冊zookeeper到註冊中心名稱 spring: application: name: cloud-provider-payment #連線zookeeper cloud: zookeeper: connect-string: 192.168.154.133:2181 #此處為對應的zookeeper使用者端地址
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作為註冊中心時註冊服務 public class PaymentMain8004 { public static void main(String[] args){ SpringApplication.run(PaymentMain8004.class,args); } }
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 { //獲取組態檔中埠對應的值 @Value("${server.port}") private String serverPort; @RequestMapping(value = "/payment/zk") public String paymentzk() { return "springcloud with zookeeper: "+serverPort+"t"+ UUID.randomUUID().toString(); } }
進入zookeeper安裝目錄下的bin目錄,啟動zookeeper伺服器
[root@zookeeper1 bin]# ./zkServer.sh start
啟動zookeeper使用者端
[root@zookeeper1 bin]# zkCli.sh
啟動成功
可以看到,此時zookeeper中的節點只有locks和zookeeper:
執行成功後如下圖所示:
我們再一次檢視zookeeper下的節點,可以看到services已經被註冊且services下的節點即為我們application.yaml為該模組設定的名字
出現如下字串則證明搭建成功
<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>
server: port: 80 spring: application: name: cloud-consumer-order cloud: #註冊到zookeeper地址 zookeeper: connect-string: 192.168.154.133:2181 #zookeeper環境所在的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); } }
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服務的使用者端, * 它提供了很多可以方便存取遠端http服務的方法,這些方法可以幫助開發人員減少編寫使用者端程式碼的工作量。 * @return */ @Bean //將RestTemplate註冊到容器中 /** * @LoadBalanced註解,我們在使用這個註解後,就能在呼叫其他微服務的時候,通過服務範例名稱就能進行呼叫其他的微服務, * 而不是直接把要呼叫的微服務的ip和埠號寫死在程式碼當中。 */ @LoadBalanced public RestTemplate getRestTemplate(){ return new RestTemplate(); } }
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 { //宣告固定的服務存取字首 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("消費者呼叫支付服務_result:"+result); return result; } }
結果如下則搭建成功
到此這篇關於SpringCloud整合zookeeper實現服務註冊並存取功能的文章就介紹到這了,更多相關SpringCloud整合zookeeper內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45