spring/springboot整合dubbo詳細(xì)教程
一、基本使用
需求:
某個(gè)電商系統(tǒng),訂單服務(wù)需要調(diào)用用戶服務(wù)獲取某個(gè)用戶的所有地址;
我們現(xiàn)在需要?jiǎng)?chuàng)建兩個(gè)服務(wù)模塊進(jìn)行測(cè)試
模塊 | 功能 |
訂單服務(wù)web模塊 | 創(chuàng)建訂單等 |
用戶服務(wù)service模塊 | 查詢用戶地址等 |
測(cè)試預(yù)期結(jié)果:
訂單服務(wù)web模塊在A服務(wù)器,用戶服務(wù)模塊在B服務(wù)器,A可以遠(yuǎn)程調(diào)用B的功能。
二、spring整合dubbo
以下使用XML 配置的方式,更多配置方式見(jiàn)官方文檔
2.1 spring-common模塊:
公共接口層(model,service,exception…),定義公共接口,也可以導(dǎo)入公共依賴
UserAddress.java:用戶地址實(shí)體類
public class UserAddress implements Serializable { private Integer id; private String userAddress; private String userId; private String consignee; private String phoneNum; private String isDefault; .... }
IOrderService.java:訂單接口
public interface IOrderService { /** * 用戶下單 * @param userId */ UserAddress placeOrder(int userId); }
IUserService.java:用戶接口
public interface IUserService { /** * 根據(jù)用戶id獲取用戶地址 * @param userId * @return */ UserAddress getUserAddById(int userId); }
pom.xml:通用的依賴,引入dubbo和zkclient
<?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>dubboStudy</artifactId> <groupId>org.example</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>spring-common</artifactId> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <dependencies> <!--dubbo --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.10</version> </dependency> <!--zookeeper --> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> </dependencies> </project>
2.2 spring-user模塊:
用戶業(yè)務(wù),作為服務(wù)提供者
pom.xml:引入通用模塊,可以使用定義的接口
<dependency> <groupId>org.example</groupId> <artifactId>spring-common</artifactId> <version>1.0-SNAPSHOT</version> </dependency>
UserServiceImpl.xml:IUserService的實(shí)現(xiàn)類,供遠(yuǎn)程調(diào)用
public class UserServiceImpl implements IUserService { @Override public UserAddress getUserAddById(int userId) { UserAddress userAddress = new UserAddress(); userAddress.setUserAddress("上海市寶山區(qū)"); return userAddress; } }
provider.xml:dubbo配置信息
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!--1、指定當(dāng)前服務(wù)/應(yīng)用的名字(同樣的服務(wù)名字相同,不要和別的服務(wù)同名)--> <dubbo:application name="spring-user"/> <!--2、指定注冊(cè)中心的位置--> <!--<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry>--> <dubbo:registry address="zookeeper://192.168.31.136:2181"/> <!--3、指定通信規(guī)則(通信協(xié)議? 服務(wù)端口)--> <dubbo:protocol name="dubbo" port="20880"/> <!--4、暴露服務(wù) 讓別人調(diào)用 ref指向服務(wù)的真正實(shí)現(xiàn)對(duì)象--> <bean id="userServiceImpl" class="me.nic.service.impl.UserServiceImpl"/> <!--服務(wù)的實(shí)現(xiàn)--> <dubbo:service interface="me.nic.service.IUserService" ref="userServiceImpl"/> </beans>
ConsumerRun.java:?jiǎn)?dòng):
public class ConsumerRun { public static void main(String[] args) throws IOException { ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("consumer.xml"); IOrderService orderService = applicationContext.getBean(IOrderService.class); orderService.placeOrder(1); System.in.read(); } }
2.3 spring-order模塊:
訂單業(yè)務(wù),作為服務(wù)消費(fèi)者
pom.xml:引入通用模塊,可以使用定義的接口,同1.2
OrderServiceImpl.xml:IOrderService的實(shí)現(xiàn)類,其中遠(yuǎn)程調(diào)用userService
@Service public class OrderServiceImpl implements IOrderService { @Autowired private IUserService userService; @Override public UserAddress placeOrder(int userId) { // 遠(yuǎn)程調(diào)用,獲取用戶地址 UserAddress userAddById = userService.getUserAddById(userId); // 下單 System.out.println("用戶地址:" + userAddById.getUserAddress()); System.out.println("下單成功"); return null; } }
consumer.xml:dubbo配置信息
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!--包掃描--> <context:component-scan base-package="me.nic.service.impl"/> <!--指定當(dāng)前服務(wù)/應(yīng)用的名字(同樣的服務(wù)名字相同,不要和別的服務(wù)同名)--> <dubbo:application name="spring-order"/> <!--指定注冊(cè)中心的位置--> <dubbo:registry address="zookeeper://192.168.31.136:2181"/> <!--調(diào)用遠(yuǎn)程暴露的服務(wù),生成遠(yuǎn)程服務(wù)代理--> <dubbo:reference id="userService" interface="me.nic.service.IUserService"/> </beans>
ProviderRun.java:?jiǎn)?dòng)
public class ProviderRun { public static void main(String[] args) throws IOException { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:provider.xml"); System.in.read(); } }
2.4 效果
ProviderRun啟動(dòng)之后阻塞,
ConsumerRun啟動(dòng)之后調(diào)用orderService.placeOrder(1)
,placeOrder
中遠(yuǎn)程調(diào)用spring-user
模塊中的userService.getUserAddById(userId)
獲取用戶地址:
用戶地址:上海市寶山區(qū) 下單成功
三、springboot整合dubbo
3.1 boot-common模塊:
公共接口層(model,service,exception…),定義公共接口,也可以導(dǎo)入公共依賴
UserAddress.java:用戶地址實(shí)體類
public class UserAddress implements Serializable { private Integer id; private String userAddress; private String userId; private String consignee; private String phoneNum; private String isDefault; .... }
IOrderService.java:訂單接口
public interface IOrderService { /** * 用戶下單 * @param userId */ UserAddress placeOrder(int userId); }
IUserService.java:用戶接口
public interface IUserService { /** * 根據(jù)用戶id獲取用戶地址 * @param userId * @return */ UserAddress getUserAddById(int userId); }
pom.xml:通用的依賴,引入dubbo的starter
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.0</version> <relativePath/> </parent> <groupId>com.example</groupId> <artifactId>boot-common</artifactId> <version>0.0.1-SNAPSHOT</version> <name>boot-common</name> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.0</version> </dependency> </dependencies> </project>
3.2 boot-user模塊:
用戶業(yè)務(wù),作為服務(wù)提供者
pom.xml:引入通用模塊,可以使用定義的接口
<dependency> <groupId>org.example</groupId> <artifactId>spring-common</artifactId> <version>1.0-SNAPSHOT</version> </dependency>
UserServiceImpl.xml:IUserService的實(shí)現(xiàn)類,供遠(yuǎn)程調(diào)用
@Service
暴露dubbo的服務(wù)
@Service @Component public class UserServiceImpl implements IUserService { @Override public UserAddress getUserAddById(int userId) { UserAddress userAddress = new UserAddress(); userAddress.setUserAddress("上海市寶山區(qū)"); return userAddress; } }
application.properties:dubbo配置信息
dubbo.application.name=boot-user dubbo.registry.address=192.168.31.136:2181 dubbo.registry.protocol=zookeeper dubbo.protocol.name=dubbo dubbo.protocol.port=20880
BootUserApplication.java:?jiǎn)?dòng):
@EnableDubbo
: 開(kāi)啟基于注解的dubbo功能
@EnableDubbo @SpringBootApplication public class BootUserApplication { public static void main(String[] args) { SpringApplication.run(BootUserApplication.class, args); } }
3.3 boot-order模塊:
訂單業(yè)務(wù),作為服務(wù)消費(fèi)者
pom.xml:引入通用模塊,可以使用定義的接口,同1.2
<dependency> <groupId>com.example</groupId> <artifactId>boot-common</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
OrderServiceImpl.xml:IOrderService的實(shí)現(xiàn)類,其中遠(yuǎn)程調(diào)用userService
@Reference
:引用遠(yuǎn)程提供者服務(wù)
@Service public class OrderServiceImpl implements IOrderService { //引用遠(yuǎn)程提供者服務(wù) @Reference private IUserService userService; @Override public UserAddress placeOrder(int userId) { // 遠(yuǎn)程調(diào)用,獲取用戶地址 UserAddress userAddById = userService.getUserAddById(userId); return userAddById; } }
OrderController.java:web接口,調(diào)用OrderService:
@Controller public class OrderController { @Autowired IOrderService orderService; @RequestMapping("/initOrder") @ResponseBody public UserAddress initOrder(@RequestParam("uid")int userId) { return orderService.placeOrder(userId); } }
application.properties:dubbo配置信息
server.port=8081 dubbo.application.name=boot-order dubbo.registry.address=zookeeper://192.168.31.136:2181
BootOrderApplication.java:?jiǎn)?dòng)
@EnableDubbo @SpringBootApplication public class BootOrderApplication { public static void main(String[] args) { SpringApplication.run(BootOrderApplication.class, args); } }
3.4 效果
到此這篇關(guān)于springboot整合dubbo詳細(xì)教程的文章就介紹到這了,更多相關(guān)springboot整合dubbo內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 教你springboot+dubbo快速啟動(dòng)的方法
- springboot與dubbo的版本匹配問(wèn)題
- IDEA整合Dubbo+Zookeeper+SpringBoot實(shí)現(xiàn)
- SpringBoot通過(guò)整合Dubbo解決@Reference注解問(wèn)題
- springboot+dubbo+validation 進(jìn)行rpc參數(shù)校驗(yàn)的實(shí)現(xiàn)方法
- SpringBoot與Dubbo整合的方式詳解
- springboot+dubbo啟動(dòng)項(xiàng)目時(shí)報(bào)錯(cuò) zookeeper not connected的問(wèn)題及解決方案
相關(guān)文章
Java實(shí)現(xiàn)視頻時(shí)間維度剪切的工具類
這篇文章主要為大家詳細(xì)介紹了將視頻按照時(shí)間維度進(jìn)行剪切的Java工具類,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2022-12-12Java數(shù)組模擬優(yōu)先級(jí)隊(duì)列數(shù)據(jù)結(jié)構(gòu)的實(shí)例
這篇文章主要介紹了Java數(shù)組模擬優(yōu)先級(jí)隊(duì)列數(shù)據(jù)結(jié)構(gòu)的實(shí)例,優(yōu)先級(jí)隊(duì)列中的元素會(huì)被設(shè)置優(yōu)先權(quán),本文的例子借助了Java中的TreeSet和TreeMap,需要的朋友可以參考下2016-04-04Hibernate 與 Mybatis 的共存問(wèn)題,打破你的認(rèn)知!(兩個(gè)ORM框架)
這篇文章主要介紹了Hibernate 與 Mybatis 如何共存?本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08SpringBoot啟動(dòng)報(bào)錯(cuò)Failed to determine a suitable driver class
這篇文章主要介紹了SpringBoot啟動(dòng)報(bào)錯(cuò)Failed to determine a suitable driver class,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05Java中redisTemplate注入失敗NullPointerException異常問(wèn)題解決
這篇文章主要介紹了Java中redisTemplate注入失敗NullPointerException異常問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2023-08-08詳解Spring boot使用Redis集群替換mybatis二級(jí)緩存
本篇文章主要介紹了詳解Spring boot使用Redis集群替換mybatis二級(jí)緩存,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05SpringBoot獲取yml和properties配置文件的內(nèi)容
這篇文章主要為大家詳細(xì)介紹了SpringBoot獲取yml和properties配置文件的內(nèi)容,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04