经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Spring » 查看文章
springboot分布式整合dubbo的方式
来源:jb51  时间:2021/11/29 12:51:59  对本文有异议

 Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。

1.服务提供者配置

  1. //需要额外引入的jar包 提供者
  2. <dependency>
  3. <groupId>com.alibaba.boot</groupId>
  4. <artifactId>dubbo-spring-boot-starter</artifactId>
  5. <version>0.2.0</version>
  6. </dependency>
  7.  
  8. <dependency>
  9. <groupId>com.github.sgroschupf</groupId>
  10. <artifactId>zkclient</artifactId>
  11. <version>0.1</version>
  12. </dependency>

spring配置方式

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://code.alibabatech.com/schema/dubbo
  8. http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
  9.  
  10. <dubbo:application name="user-service-provider"></dubbo:application>
  11. <!-- 指定注册中心的地址,将来服务提供者要向注册中心进行注册-->
  12. <dubbo:registry address="zookeeper://192.168.192.3:2181"></dubbo:registry>
  13. <!-- 指定将来服务消费者消费我的时候使用的rpc协议 -->
  14. <dubbo:protocol name="dubbo" port="11123"></dubbo:protocol>
  15. <!-- 服务发布 -->
  16. <bean id="userService" class="com.oracle.shop.user.service.impl.UserServiceImpl"></bean>
  17. <dubbo:service interface="com.oracle.shop.user.service.UserService" ref="userService"></dubbo:service>
  18.  
  19. </beans>

springboot配置方式

  1. #dubbo的配置
  2. #服务名
  3. dubbo.application.name=user-provider
  4. #注册中心地址
  5. dubbo.registry.address=zookeeper://192.168.192.3:2181
  6. #使用的协议以及端口号
  7. dubbo.protocol.name=dubbo
  8. dubbo.protocol.port=11111

发布服务的方式

在相应的实现类上添加注解

  1. import com.alibaba.dubbo.config.annotation.Service;
  2. import com.oracle.shopping.user.mapper.MenuMapper;
  3. import com.oracle.shopping.user.po.Menu;
  4. import com.oracle.shopping.user.service.MenuService;
  5. import javax.annotation.Resource;
  6. @Service //dubbo的注解表示发布该类
  7. @org.springframework.stereotype.Service//spring的注解表示会在启动时实例化该类
  8. public class MenuServiceImpl implements MenuService {
  9.  
  10. @Resource
  11. private MenuMapper menuMapper;
  12.  
  13. @Override
  14. public int deleteByPrimaryKey(String id) {
  15. return menuMapper.deleteByPrimaryKey(id);
  16. }
  17.  
  18. @Override
  19. public int insert(Menu record) {
  20. return menuMapper.insert(record);
  21. }
  22.  
  23. @Override
  24. public int insertSelective(Menu record) {
  25. return menuMapper.insertSelective(record);
  26. }
  27.  
  28. @Override
  29. public Menu selectByPrimaryKey(String id) {
  30. return menuMapper.selectByPrimaryKey(id);
  31. }
  32.  
  33. @Override
  34. public int updateByPrimaryKeySelective(Menu record) {
  35. return menuMapper.updateByPrimaryKeySelective(record);
  36. }
  37.  
  38. @Override
  39. public int updateByPrimaryKey(Menu record) {
  40. return menuMapper.updateByPrimaryKey(record);
  41. }
  42.  
  43. }

启动类中添加dubbo的扫包器,设置扫描路径

  1. @SpringBootApplication
  2. @MapperScan("com.oracle.shopping.user.mapper")
  3. @EnableTransactionManagement
  4. @DubboComponentScan("com.oracle.shopping.user.service.impl")
  5. public class UserProviderApp {
  6.  
  7. public static void main(String[] args) {
  8. SpringApplication.run(UserProviderApp.class, args);
  9. }
  10. }

2.服务消费者订阅

  1. <dependency>
  2. <groupId>com.alibaba.boot</groupId>
  3. <artifactId>dubbo-spring-boot-starter</artifactId>
  4. <version>0.2.0</version>
  5. </dependency>
  6.  
  7. <dependency>
  8. <groupId>com.github.sgroschupf</groupId>
  9. <artifactId>zkclient</artifactId>
  10. <version>0.1</version>
  11. </dependency>

spring配置方式

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://code.alibabatech.com/schema/dubbo
  8. http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
  9.  
  10. <dubbo:application name="user-web-consumer"></dubbo:application>
  11. <!-- 指定注册中心的地址,将来服务提供者要向注册中心进行注册-->
  12. <dubbo:registry address="zookeeper://192.168.192.3:2181"></dubbo:registry>
  13. <!-- 订阅具体服务,让dubbo帮咱们生成动态代理客户端对象-->
  14. <dubbo:reference interface="com.oracle.shop.user.service.UserService" id="userService"></dubbo:reference>
  15. <dubbo:reference interface="com.oracle.shop.order.service.OrderService" id="orderService"></dubbo:reference>
  16.  
  17. </beans>

在controller中进行依赖注入和调用

  1. @Controller
  2. @RequestMapping("/user")
  3. public class UserController {
  4. //通过动态代理的方式生成的动态代理类
  5. @Autowired(required = false)
  6. private UserService userService;
  7. //不进行检查,防止报错无法运行
  8. @Autowired(required = false)
  9. private OrderService orderService;
  10.  
  11.  
  12. @RequestMapping("/a")
  13. public @ResponseBody
  14. User detail(){
  15. return userService.findUserById(1);
  16. }
  17.  
  18. @RequestMapping("/b")
  19. public @ResponseBody
  20. Orders details(){
  21. return orderService.findUserById(1);
  22. }
  23.  
  24. }

springboot配置方式

  1. #指定自己的名称
  2. dubbo.application.name=user-consumer
  3. #指定注册中心的地址
  4. dubbo.registry.address=zookeeper://192.168.192.3:2181

?在controller当中使用注解声明要使用的服务(实现类)

  1. @RestController
  2. @RequestMapping("/user")
  3. public class UserController {
  4.  
  5. //表示要使用的服务
  6. @Reference(interfaceName = "com.oracle.shopping.user.service.UserService")
  7. private UserService userService;
  8.  
  9. @Autowired
  10. private RedisTemplate redisTemplate;
  11.  
  12.  
  13. @RequestMapping("/detail")
  14. public User detail(String id){
  15. return userService.selectByPrimaryKey(id);
  16. }
  17. }

启动类中设置dobbo注解的扫描路径

  1. @SpringBootApplication
  2. @DubboComponentScan("com.oracle.shopping.user.controller")
  3. public class UserConsumerApp {
  4.  
  5. public static void main(String[] args) {
  6. SpringApplication.run(UserConsumerApp.class );
  7. }
  8. }

到此这篇关于springboot(分布式)整合dubbo的文章就介绍到这了,更多相关springboot整合dubbo内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号