Dubbo服务发布调用实现

傷城~ 2022-05-15 07:49 326阅读 0赞

服务发布调用实现

系统需求
根据商品id,查询商品信息

Dao

单表查询,不需要写代码
使用Mybatis逆向工程生成的代码

Interface

在taotao-manager-interface工程中
创建一个ItemService接口

  1. public interface ItemService {
  2. TbItem getItemById(long itemId);
  3. }

Service

实现接口
要找到接口,需要添加对接口的引用

  1. <dependency>
  2. <groupId>com.taotao</groupId>
  3. <artifactId>taotao-manager-interface</artifactId>
  4. <version>0.0.1-SNAPSHOT</version>
  5. </dependency>

在taotao-manager-Service工程中
创建一个itemSeviceImpl的实现类

  1. @Service
  2. public class ItemServiceImpl implements ItemService {
  3. @Autowired
  4. private TbItemMapper itemMapper;
  5. @Override
  6. public TbItem getItemById(long itemId) {
  7. TbItem item = itemMapper.selectByPrimaryKey(itemId);
  8. return item;
  9. }
  10. }

发布服务

使用Dubbo发布服务,引入jar包
父工程,控制版本号
Service,添加jar包引用

  1. <!-- dubbo相关的jar包 -->
  2. <dependency>
  3. <groupId>com.alibaba</groupId>
  4. <artifactId>dubbo</artifactId>
  5. <exclusions>
  6. <exclusion>
  7. <artifactId>spring</artifactId>
  8. <groupId>org.springframework</groupId>
  9. </exclusion>
  10. <exclusion>
  11. <artifactId>netty</artifactId>
  12. <groupId>org.jboss.netty</groupId>
  13. </exclusion>
  14. </exclusions>
  15. </dependency>
  16. <dependency>
  17. <groupId>org.apache.zookeeper</groupId>
  18. <artifactId>zookeeper</artifactId>
  19. </dependency>
  20. <dependency>
  21. <groupId>com.github.sgroschupf</groupId>
  22. <artifactId>zkclient</artifactId>
  23. </dependency>

注意

Maven依赖传递
引入Dubbo的时候,会把依赖的Spring版本也添加进来

排除Spring的引用,否则,可能会有版本冲突问题
同理,排除netty的引用
选中,右键Exclude Maven Artifact
这里写图片描述

引用标签

在配置文件中,使用dubbo标签
需要添加dubbo标签,dubbo约束

否则,使用dubbo标签,标签提示错误
applicationContext-service.xml

  1. xmlns:dubbo=http://code.alibabatech.com/schema/dubbo
  2. http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd

这里写图片描述

发布服务

  1. <!-- 发布dubbo服务 -->
  2. <!-- 提供方应用信息,用于计算依赖关系 -->
  3. <dubbo:application name="taotao-manager" />
  4. <!-- 注册中心的地址 -->
  5. <dubbo:registry protocol="zookeeper" address="192.168.25.167:2181" />
  6. <!-- 用dubbo协议在20880端口暴露服务 -->
  7. <dubbo:protocol name="dubbo" port="20880" />
  8. <!-- 声明需要暴露的服务接口 -->
  9. <dubbo:service interface="com.taotao.service.ItemService" ref="itemServiceImpl" timeout="300"/>

配置说明

dubbo:application,配置应用程序,名称
dubbo:registry,配置注册中心,地址端口号,默认2181

dubbo:protocol,配置dubbo服务端口号,默认20880
这个端口号,可以改为其他端口号
只要不冲突,并且在65535范围内即可

dubbo:service,暴露服务接口
Interface,接口,配置接口的全路径名
Ref,引用接口实现,从容器中获取

itemServiceImpl
通过扫描包,扫描到具体的实现类
在容器中创建一个Bean,添加到Spring容器中
Id,默认为类名,首字母小写itemServiceImpl

  1. <context:component-scan base-package="com.taotao.service"/>

Timeout,设置超时时间

服务调用

Web工程,添加dubbo引用

  1. <!-- dubbo相关的jar包 -->
  2. <dependency>
  3. <groupId>com.alibaba</groupId>
  4. <artifactId>dubbo</artifactId>
  5. <exclusions>
  6. <exclusion>
  7. <artifactId>spring</artifactId>
  8. <groupId>org.springframework</groupId>
  9. </exclusion>
  10. <exclusion>
  11. <artifactId>netty</artifactId>
  12. <groupId>org.jboss.netty</groupId>
  13. </exclusion>
  14. </exclusions>
  15. </dependency>
  16. <dependency>
  17. <groupId>org.apache.zookeeper</groupId>
  18. <artifactId>zookeeper</artifactId>
  19. </dependency>
  20. <dependency>
  21. <groupId>com.github.sgroschupf</groupId>
  22. <artifactId>zkclient</artifactId>
  23. </dependency>

引用标签

需要在Spring容器中,引用服务
Spring MVC前端控制器,也会初始化一个Spring容器
所以,可以在Spring MVC里面直接引用服务

Springmvc.xml
同理,添加dubbo标签、约束

  1. xmlns:dubbo=http://code.alibabatech.com/schema/dubbo
  2. http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd

这里写图片描述

引用服务

  1. <!-- 引用dubbo服务 -->
  2. <dubbo:application name="taotao-manager-web"/>
  3. <dubbo:registry protocol="zookeeper" address="192.168.25.167:2181"/>
  4. <dubbo:reference interface="com.taotao.service.ItemService" id="itemService" />

配置说明

发布服务,需要在注册中心注册
引用服务,也需要在注册中心注册

dubbo:application,配置应用程序,程序名称
dubbo:registry,配置注册中心,地址端口号
dubbo:reference,引用服务

Interface

Web需要引用Interface接口
Pom文件,添加对接口的引用

  1. <dependency>
  2. <groupId>com.taotao</groupId>
  3. <artifactId>taotao-manager-interface</artifactId>
  4. <version>0.0.1-SNAPSHOT</version>
  5. </dependency>

接口
需要单独提出了,存放接口的定义

服务端,发布服务,需要这个接口定义
表现层,引用服务,也需要这个接口定义
所以,把接口打成一个jar包,方便表现层的引用

虽然,Interface是工程的一个模块
但是,只要是一个jar包有坐标,就可以通过坐标引用

此时,Spring MVC容器中
就有这个Interface的代理对象,通过id给Bean起个名字
容器中,就有这个Bean对象

Controller

通过注解,注入这个对象
在Spring MVC容器初始化的时候
会把这个Bean注入到Controller中,直接调用即可

  1. @Controller
  2. public class ItemController {
  3. @Autowired
  4. private ItemService itemService;
  5. @RequestMapping("/item/{itemId}")
  6. @ResponseBody
  7. public TbItem getItemById(@PathVariable Long itemId) {
  8. TbItem tbItem = itemService.getItemById(itemId);
  9. return tbItem;
  10. }
  11. }

发表评论

表情:
评论列表 (有 0 条评论,326人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Dubbo服务调用失败

    解决方法 查看管控台 查看注解 查看扫描包 查看发布服务 查看加载配置文件 查看管控台 Dubbo管控台,查找该服务 是否存在,服务状态是否正