SpringBoot整合Dubbo+Zookeeper實現(xiàn)RPC調(diào)用
Spring Boot整合Dubbo+Zookeeper實現(xiàn)RPC調(diào)用
技術(shù)棧說明
Dubbo:Dubbo作為RPC框架,能在多個服務(wù)之間實現(xiàn)遠(yuǎn)程服務(wù)的調(diào)用。比如有兩個獨(dú)立的微服務(wù)A和B,A服務(wù)想要調(diào)用B服務(wù)時,因為兩者不在同個內(nèi)存空間中,不能直接調(diào)用,所以可以通過Dubbo實現(xiàn)這點(diǎn)。
功能和Spring Cloud的Feign相同,兩者都是應(yīng)用于微服務(wù)架構(gòu)的遠(yuǎn)程調(diào)用框架
Zookeeper:作為注冊中心去管理Dubbo服務(wù),這點(diǎn)和Eureka、Nacos相同。
概述
通過一個示例說明Dubbo+Zookeeper在Spring Boot中的應(yīng)用。
現(xiàn)有兩個服務(wù)provider和consumer,即生產(chǎn)者和消費(fèi)者:
實現(xiàn)步驟
- 搭建Zookeeper集群服務(wù)作為注冊中心(docker-compose)
- Spring Boot項目,添加依賴,并創(chuàng)建三個Module:
- api:提供Service接口,但不實現(xiàn)
- provider:實現(xiàn)api的Service接口
- consumer:調(diào)用api的Service接口,并對外提供訪問接口
期望結(jié)果
調(diào)用consumer服務(wù)的訪問接口,能訪問到數(shù)據(jù),則說明provider實現(xiàn)的服務(wù)成功注冊到zookeeper注冊中心,并被consumer獲取到。
實現(xiàn)
Zookeeper集群搭建(docker-compose)
zookeeper.yml:
version: "3" services: zk1: image: zookeeper network_mode: mynetwork container_name: zk1 restart: always hostname: zk1 # 端口映射,三個容器的對外端口是不同的 ports: - 2181:2181 - 8081:8080 # 路徑映射,路徑也要注意不同 volumes: - /etc/localtime:/etc/localtime - /home/mycontainers/zk1/data:/data - /home/mycontainers/zk1/datalog:/datalog environment: # 當(dāng)前zk實例的id - ZOO_MY_ID=1 # 整個zk集群的機(jī)器、端口列表 - ZOO_SERVERS=server.1=0.0.0.0:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181 zk2: image: zookeeper network_mode: mynetwork container_name: zk2 restart: always hostname: zk2 # 端口映射,三個容器的對外端口是不同的 ports: - 2182:2181 - 8082:8080 # 路徑映射,路徑也要注意不同 volumes: - /etc/localtime:/etc/localtime - /home/mycontainers/zk2/data:/data - /home/mycontainers/zk2/datalog:/datalog environment: # 當(dāng)前zk實例的id - ZOO_MY_ID=2 # 整個zk集群的機(jī)器、端口列表 - ZOO_SERVERS=server.1=zk1:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=zk3:2888:3888;2181 zk3: image: zookeeper network_mode: mynetwork container_name: zk3 restart: always hostname: zk3 # 端口映射,三個容器的對外端口是不同的 ports: - 2183:2181 - 8083:8080 # 路徑映射,路徑也要注意不同 volumes: - /etc/localtime:/etc/localtime - /home/mycontainers/zk3/data:/data - /home/mycontainers/zk3/datalog:/datalog environment: # 當(dāng)前zk實例的id - ZOO_MY_ID=3 # 整個zk集群的機(jī)器、端口列表 - ZOO_SERVERS=server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181
啟動服務(wù):
docker-compose -f zookeeper.yml up
訪問Zookeeper:http://mylocalhost:8081/commands
有Json結(jié)果輸出表示Zookeeper服務(wù)啟動成功。
Spring Boot添加Dubbo依賴
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.3.4.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-registry-zookeeper</artifactId> <version>3.1.0</version> </dependency> </dependencies> </dependencyManagement> <!--使用阿里云的Maven源--> <repositories> <repository> <id>aliyunmaven</id> <name>aliyun</name> <url>https://maven.aliyun.com/repository/public</url> </repository> </repositories>
dubbo-api代碼
僅提供接口,不提供實現(xiàn),讓provider去實現(xiàn)代碼,來驗證provider和consumer之間的脫藕。
/service TimeService
package com.cc.service; import java.time.LocalDateTime; public interface TimeService { LocalDateTime getTime(); }
dubbo-provider代碼
provider和consumer的pom.xml是一致的:
<dependencies> <!--springboot啟動器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-registry-zookeeper</artifactId> </dependency> <dependency> <groupId>com.com.cc</groupId> <artifactId>dubbo-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies>
application.yml
server: port: 8081 dubbo: application: name: provider-app registry: address: zookeeper://mylocalhost:2181
provider去實現(xiàn)類的接口,TimeServiceImpl.java:
package com.cc.service.impl; import com.cc.service.TimeService; import org.apache.dubbo.config.annotation.DubboService; import java.time.LocalDateTime; // 使用這個注解,可以將該接口實現(xiàn)注冊到注冊中心 @DubboService public class TimeServiceImpl implements TimeService { @Override public LocalDateTime getTime() { return LocalDateTime.now(); } }
啟動類需要添加@EnableDubbo注解:
@EnableDubbo @SpringBootApplication public class ProviderApplication { public static void main(String[] args) { SpringApplication.run(ProviderApplication.class, args); } }
dubbo-consumer代碼
application.yml:
server: port: 8082 dubbo: application: name: consumer-app registry: address: zookeeper://mylocalhost:2181
對外提供訪問接口:
@RestController public class ConsumerController { @DubboReference private TimeService timeService; @GetMapping("/") public String getTime() { return timeService.getTime().format(DateTimeFormatter.ISO_DATE_TIME); } }
記得添加@Dubbo注解:
@EnableDubbo @SpringBootApplication public class ConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); } }
驗證
現(xiàn)在去訪問:http://localhost:8082/
有結(jié)果則表示驗證通過。
到此這篇關(guān)于SpringBoot整合Dubbo+Zookeeper實現(xiàn)RPC調(diào)用的文章就介紹到這了,更多相關(guān)SpringBoot RPC調(diào)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 淺談Java(SpringBoot)基于zookeeper的分布式鎖實現(xiàn)
- 使用dubbo+zookeeper+spring boot構(gòu)建服務(wù)的方法詳解
- SpringBoot中dubbo+zookeeper實現(xiàn)分布式開發(fā)的應(yīng)用詳解
- SpringBoot集成Curator實現(xiàn)Zookeeper基本操作的代碼示例
- SpringBoot系列教程之dubbo和Zookeeper集成方法
- springboot應(yīng)用訪問zookeeper的流程
- SpringBoot整合Zookeeper詳細(xì)教程
- Java Spring Boot 集成Zookeeper
- SpringBoot讀取ZooKeeper(ZK)屬性的方法實現(xiàn)
相關(guān)文章
SpringMVC4.3?HttpMessageConverter接口實現(xiàn)源碼分析
這篇文章主要為大家介紹了SpringMVC4.3?HttpMessageConverter接口實現(xiàn)源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09Spring緩存注解@Cacheable @CacheEvit @CachePut使用介紹
Spring在3.1版本,就提供了一條基于注解的緩存策略,實際使用起來還是很絲滑的,本文將針對幾個常用的注解進(jìn)行簡單的介紹說明,有需要的小伙伴可以嘗試一下2021-07-07詳解Spring Cloud Zuul網(wǎng)關(guān)修改為短連接方法
本文主要介紹了詳解Spring Cloud Zuul網(wǎng)關(guān)修改為短連接方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04spring實現(xiàn)bean對象創(chuàng)建代碼詳解
這篇文章主要介紹了spring實現(xiàn)bean對象創(chuàng)建代碼詳解,具有一定借鑒價值,需要的朋友可以參考下2017-12-12詳解springboot+mybatis-plue實現(xiàn)內(nèi)置的CRUD使用詳情
這篇文章主要介紹了詳解springboot+mybatis-plue實現(xiàn)內(nèi)置的CRUD使用詳情,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07