springboot分布式整合dubbo的方式
程序员文章站
2022-03-19 09:54:03
dubbo是alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,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内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
推荐阅读
-
SpringBoot整合MongoDB的步骤详解
-
详解springboot+aop+Lua分布式限流的最佳实践
-
SpringBoot整合SpringCloud搭建分布式应用
-
SpringBoot整合JDBC的实现
-
手把手教你Dubbo与SpringBoot常用两种方式整合
-
Spring项目整合成SpringBoot的简单登录拦截Demo
-
SpringBoot整合SpringTask实现定时任务的流程
-
浅谈分布式锁的几种使用方式(redis、zookeeper、数据库)
-
(四)创建基于maven的javaFX+springboot项目,用户界面与后台逻辑分离方式
-
SpringBoot整合log4j日志与HashMap的底层原理解析