springboot分布式整合dubbo的方式
Dubbo是Alibaba開(kāi)源的分布式服務(wù)框架,它最大的特點(diǎn)是按照分層的方式來(lái)架構(gòu),使用這種方式可以使各個(gè)層之間解耦合(或者最大限度地松耦合)。從服務(wù)模型的角度來(lái)看,Dubbo采用的是一種非常簡(jiǎn)單的模型,要么是提供方提供服務(wù),要么是消費(fèi)方消費(fèi)服務(wù),所以基于這一點(diǎn)可以抽象出服務(wù)提供方(Provider)和服務(wù)消費(fèi)方(Consumer)兩個(gè)角色。
1.服務(wù)提供者配置
//需要額外引入的jar包 提供者 <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.0</version> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency>
spring配置方式
<?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://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <dubbo:application name="user-service-provider"></dubbo:application> <!-- 指定注冊(cè)中心的地址,將來(lái)服務(wù)提供者要向注冊(cè)中心進(jìn)行注冊(cè)--> <dubbo:registry address="zookeeper://192.168.192.3:2181"></dubbo:registry> <!-- 指定將來(lái)服務(wù)消費(fèi)者消費(fèi)我的時(shí)候使用的rpc協(xié)議 --> <dubbo:protocol name="dubbo" port="11123"></dubbo:protocol> <!-- 服務(wù)發(fā)布 --> <bean id="userService" class="com.oracle.shop.user.service.impl.UserServiceImpl"></bean> <dubbo:service interface="com.oracle.shop.user.service.UserService" ref="userService"></dubbo:service> </beans>
springboot配置方式
#dubbo的配置 #服務(wù)名 dubbo.application.name=user-provider #注冊(cè)中心地址 dubbo.registry.address=zookeeper://192.168.192.3:2181 #使用的協(xié)議以及端口號(hào) dubbo.protocol.name=dubbo dubbo.protocol.port=11111
發(fā)布服務(wù)的方式
在相應(yīng)的實(shí)現(xiàn)類(lèi)上添加注解
import com.alibaba.dubbo.config.annotation.Service; import com.oracle.shopping.user.mapper.MenuMapper; import com.oracle.shopping.user.po.Menu; import com.oracle.shopping.user.service.MenuService; import javax.annotation.Resource; @Service //dubbo的注解表示發(fā)布該類(lèi) @org.springframework.stereotype.Service//spring的注解表示會(huì)在啟動(dòng)時(shí)實(shí)例化該類(lèi) public class MenuServiceImpl implements MenuService { @Resource private MenuMapper menuMapper; @Override public int deleteByPrimaryKey(String id) { return menuMapper.deleteByPrimaryKey(id); } @Override public int insert(Menu record) { return menuMapper.insert(record); } @Override public int insertSelective(Menu record) { return menuMapper.insertSelective(record); } @Override public Menu selectByPrimaryKey(String id) { return menuMapper.selectByPrimaryKey(id); } @Override public int updateByPrimaryKeySelective(Menu record) { return menuMapper.updateByPrimaryKeySelective(record); } @Override public int updateByPrimaryKey(Menu record) { return menuMapper.updateByPrimaryKey(record); } }
啟動(dòng)類(lèi)中添加dubbo的掃包器,設(shè)置掃描路徑
@SpringBootApplication @MapperScan("com.oracle.shopping.user.mapper") @EnableTransactionManagement @DubboComponentScan("com.oracle.shopping.user.service.impl") public class UserProviderApp { public static void main(String[] args) { SpringApplication.run(UserProviderApp.class, args); } }
2.服務(wù)消費(fèi)者訂閱
<dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.0</version> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency>
spring配置方式
<?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://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <dubbo:application name="user-web-consumer"></dubbo:application> <!-- 指定注冊(cè)中心的地址,將來(lái)服務(wù)提供者要向注冊(cè)中心進(jìn)行注冊(cè)--> <dubbo:registry address="zookeeper://192.168.192.3:2181"></dubbo:registry> <!-- 訂閱具體服務(wù),讓dubbo幫咱們生成動(dòng)態(tài)代理客戶(hù)端對(duì)象--> <dubbo:reference interface="com.oracle.shop.user.service.UserService" id="userService"></dubbo:reference> <dubbo:reference interface="com.oracle.shop.order.service.OrderService" id="orderService"></dubbo:reference> </beans>
在controller中進(jìn)行依賴(lài)注入和調(diào)用
@Controller @RequestMapping("/user") public class UserController { //通過(guò)動(dòng)態(tài)代理的方式生成的動(dòng)態(tài)代理類(lèi) @Autowired(required = false) private UserService userService; //不進(jìn)行檢查,防止報(bào)錯(cuò)無(wú)法運(yùn)行 @Autowired(required = false) private OrderService orderService; @RequestMapping("/a") public @ResponseBody User detail(){ return userService.findUserById(1); } @RequestMapping("/b") public @ResponseBody Orders details(){ return orderService.findUserById(1); } }
springboot配置方式
#指定自己的名稱(chēng) dubbo.application.name=user-consumer #指定注冊(cè)中心的地址 dubbo.registry.address=zookeeper://192.168.192.3:2181
?在controller當(dāng)中使用注解聲明要使用的服務(wù)(實(shí)現(xiàn)類(lèi))
@RestController @RequestMapping("/user") public class UserController { //表示要使用的服務(wù) @Reference(interfaceName = "com.oracle.shopping.user.service.UserService") private UserService userService; @Autowired private RedisTemplate redisTemplate; @RequestMapping("/detail") public User detail(String id){ return userService.selectByPrimaryKey(id); } }
啟動(dòng)類(lèi)中設(shè)置dobbo注解的掃描路徑
@SpringBootApplication @DubboComponentScan("com.oracle.shopping.user.controller") public class UserConsumerApp { public static void main(String[] args) { SpringApplication.run(UserConsumerApp.class ); } }
到此這篇關(guān)于springboot(分布式)整合dubbo的文章就介紹到這了,更多相關(guān)springboot整合dubbo內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 詳解SpringBoot開(kāi)發(fā)案例之整合Dubbo分布式服務(wù)
- Springboot-dubbo-fescar 阿里分布式事務(wù)的實(shí)現(xiàn)方法
- Spring Boot Dubbo 構(gòu)建分布式服務(wù)的方法
- SpringBoot+Dubbo+Seata分布式事務(wù)實(shí)戰(zhàn)詳解
- 詳解SpringBoot基于Dubbo和Seata的分布式事務(wù)解決方案
- SpringBoot中dubbo+zookeeper實(shí)現(xiàn)分布式開(kāi)發(fā)的應(yīng)用詳解
- SpringBoot+Dubbo+Zookeeper實(shí)現(xiàn)簡(jiǎn)單分布式開(kāi)發(fā)的應(yīng)用詳解
- springBoot+dubbo+zookeeper實(shí)現(xiàn)分布式開(kāi)發(fā)應(yīng)用的項(xiàng)目實(shí)踐
- Spring與Dubbo搭建一個(gè)簡(jiǎn)單的分布式詳情
相關(guān)文章
一篇文章帶你搞定SpringBoot中的熱部署devtools方法
這篇文章主要介紹了一篇文章帶你搞定SpringBoot中的熱部署devtools方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09springboot使用redisTemplate操作lua腳本
本文主要介紹了springboot使用redisTemplate操作lua腳本,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08詳解SpringBoot如何自定義一個(gè)Starter
小伙伴們?cè)?jīng)可能都經(jīng)歷過(guò)整天寫(xiě)著CURD的業(yè)務(wù),都沒(méi)寫(xiě)過(guò)一些組件相關(guān)的東西,這篇文章記錄一下SpringBoot如何自定義一個(gè)Starter。原理和理論就不用多說(shuō)了,可以在網(wǎng)上找到很多關(guān)于該方面的資料,這里主要分享如何自定義2022-11-11Java實(shí)現(xiàn)軟件運(yùn)行時(shí)啟動(dòng)信息窗口的方法
這篇文章主要介紹了Java實(shí)現(xiàn)軟件運(yùn)行時(shí)啟動(dòng)信息窗口的方法,比較實(shí)用的功能,需要的朋友可以參考下2014-08-08Spring?Boot?整合JPA?數(shù)據(jù)模型關(guān)聯(lián)使用操作(一對(duì)一、一對(duì)多、多對(duì)多)
這篇文章主要介紹了Spring?Boot?整合JPA?數(shù)據(jù)模型關(guān)聯(lián)操作(一對(duì)一、一對(duì)多、多對(duì)多),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07Mac安裝多個(gè)JDK并實(shí)現(xiàn)動(dòng)態(tài)切換
有時(shí)候我們有多個(gè)項(xiàng)目需要使用多個(gè)版本JDK,本文主要介紹了Mac安裝多個(gè)JDK并實(shí)現(xiàn)動(dòng)態(tài)切換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07