springboot分布式整合dubbo的方式
Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。
1.服务提供者配置
//需要额外引入的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> <!-- 指定注册中心的地址,将来服务提供者要向注册中心进行注册--> <dubbo:registry address="zookeeper://192.168.192.3:2181"></dubbo:registry> <!-- 指定将来服务消费者消费我的时候使用的rpc协议 --> <dubbo:protocol name="dubbo" port="11123"></dubbo:protocol> <!-- 服务发布 --> <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的配置 #服务名 dubbo.application.name=user-provider #注册中心地址 dubbo.registry.address=zookeeper://192.168.192.3:2181 #使用的协议以及端口号 dubbo.protocol.name=dubbo dubbo.protocol.port=11111
发布服务的方式
在相应的实现类上添加注解
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的注解表示发布该类 @org.springframework.stereotype.Service//spring的注解表示会在启动时实例化该类 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); } }
启动类中添加dubbo的扫包器,设置扫描路径
@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.服务消费者订阅
<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> <!-- 指定注册中心的地址,将来服务提供者要向注册中心进行注册--> <dubbo:registry address="zookeeper://192.168.192.3:2181"></dubbo:registry> <!-- 订阅具体服务,让dubbo帮咱们生成动态代理客户端对象--> <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中进行依赖注入和调用
@Controller @RequestMapping("/user") public class UserController { //通过动态代理的方式生成的动态代理类 @Autowired(required = false) private UserService userService; //不进行检查,防止报错无法运行 @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配置方式
#指定自己的名称 dubbo.application.name=user-consumer #指定注册中心的地址 dubbo.registry.address=zookeeper://192.168.192.3:2181
在controller当中使用注解声明要使用的服务(实现类)
@RestController @RequestMapping("/user") public class UserController { //表示要使用的服务 @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); } }
启动类中设置dobbo注解的扫描路径
@SpringBootApplication @DubboComponentScan("com.oracle.shopping.user.controller") public class UserConsumerApp { public static void main(String[] args) { SpringApplication.run(UserConsumerApp.class ); } }
到此这篇关于springboot(分布式)整合dubbo的文章就介绍到这了,更多相关springboot整合dubbo内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!
原文出处:https://www.cnblogs.com/guyihan/p/15618276.html
相关文章
解决springboot使用logback日志出现LOG_PATH_IS_UNDEFINED文件夹的问题
这篇文章主要介绍了解决springboot使用logback日志出现LOG_PATH_IS_UNDEFINED文件夹的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-28- 这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
- 这篇文章主要介绍了详解springBoot启动时找不到或无法加载主类解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-09-16
- 这篇文章主要介绍了SpringBoot集成Redis实现消息队列的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-10
- 这篇文章主要介绍了解决Springboot get请求是参数过长的情况,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-17
Spring Boot项目@RestController使用重定向redirect方式
这篇文章主要介绍了Spring Boot项目@RestController使用重定向redirect方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-02- 这篇文章主要介绍了Springboot+TCP监听服务器搭建过程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-10-28
- 这篇文章主要介绍了springBoot 项目排除数据库启动方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-10
详解SpringBoot之访问静态资源(webapp...)
这篇文章主要介绍了详解SpringBoot之访问静态资源(webapp...),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-09-14- 这篇文章主要介绍了SpringBoot接口接收json参数解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-10-19
springboot中使用@Transactional注解事物不生效的坑
这篇文章主要介绍了springboot中使用@Transactional注解事物不生效的原因,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-26- 这篇文章主要介绍了springboot多模块包扫描问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-09-16
- 这篇文章主要介绍了Springboot实现多线程注入bean的工具类操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-27
Springboot mybatis plus druid多数据源解决方案 dynamic-datasource的使用详解
这篇文章主要介绍了Springboot mybatis plus druid多数据源解决方案 dynamic-datasource的使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-11-18Springboot+MDC+traceId日志中打印唯一traceId
本文主要介绍了Springboot+MDC+traceId日志中打印唯一traceId,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-10-17SpringBoot部署到Linux读取resources下的文件及遇到的坑
本文主要给大家介绍SpringBoot部署到Linux读取resources下的文件,在平时业务开发过程中,很多朋友在获取到文件内容乱码或者文件读取不到的问题,今天给大家分享小编遇到的坑及处理方案,感兴趣的朋友跟随小编一起看看吧...2021-06-21- 这篇文章主要介绍了springboot中nacos动态路由的配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-11
SpringBoot高版本修改为低版本时测试类报错的解决方案
这篇文章主要介绍了SpringBoot高版本修改为低版本时测试类报错的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-18解决Springboot整合shiro时静态资源被拦截的问题
这篇文章主要介绍了解决Springboot整合shiro时静态资源被拦截的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-26- 这篇文章主要介绍了详解SpringBoot读取配置文件的N种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-10