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

