当前位置:   article > 正文

SpringCloudAlibaba系列微服务搭建笔记五_Dubbo_springcloud dubbo 项目

springcloud dubbo 项目

八、远程调用-DubboSpringCloud

8.1 简介

Dubbo Spring Cloud是阿里为了将Dubbo框架与SpringCloud技术栈结合而开发出来的框架。可以与SpringCloud生态下的各种微服务组件如NacosZookeeper等无缝集成。
Dubbo Spring Cloud相比OpenFeign的特点是它可以使用TCP协议来调用接口。

8.2 集成 DubboSpringCloud

基于前面的sentinel-sample项目复制一份修改,作为DubboSpringCloud的模块基础。
在这里插入图片描述

8.2.1 创建api模块

在这里插入图片描述

public interface TestService { // 暴露出去的接口
    String dubboTest(String message); // 测试方法
}
  • 1
  • 2
  • 3

8.2.3 修改服务提供方模块

  1. 导入api模块
  2. 添加
<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
  • 1
  • 2
  • 3
  • 4

注意:
要把热部署的依赖给去掉,不然会因为类加载器的问题报加载不到类的错误。

  1. bootstrap.yml添加dubbo配置项
spring:
  main:
    allow-bean-definition-overriding: true           # 新增 允许 bean 定义覆盖
  # ...省略
  
dubbo:                                               # 新增
  scan:                                              # 新增
    base-packages: com.echoo.cloud.dubbo.provider.api.service.impl # 新增 dubbo 服务扫描基准包
  protocol:                                          # 新增 协议
    name: dubbo                                      # 新增 协议名称 dubbo
    port: -1                                         # 新增 dubbo 协议端口( -1 表示自增,从 20880 开始)
  registry:                                          # 新增
    address: spring-cloud://localhost                 # 新增 挂载到 Spring Cloud 注册中心
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

注意:

  1. dubbo的扫描包是指实现类所在的目录,而不是接口的目录
    在这里插入图片描述
  2. Dubbo Spring Cloud 基于 Spring Cloud Commons 抽象实现 Dubbo 服务注册与发现,应用只需增添外部化配置属性 dubbo.registry.address = spring-cloud://localhost,就能轻松地桥接到所有原生 Spring Cloud 注册中心,包括:- Nacos - Eureka - Zookeeper - Consul
  1. 在服务提供者模块实现接口api模块中的接口
    在这里插入图片描述
@Service
public class TestServiceImpl implements TestService {
    public String dubboTest(String message) {
        return "服务员收到,over ovier";
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

@Servicedubbo的注解,别导错了

8.2.3 修改服务消费者模块

  1. 导入依赖
		<!-- dubbo 依赖 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
        </dependency>
        <!-- api 模块 -->
        <dependency>
            <groupId>com.echoo.cloud.dubbo</groupId>
            <artifactId>api</artifactId>
        </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

记得服务消费方也要把热部署依赖给去掉,不然会报错加载不到类。

  1. 添加配置
dubbo:                                               # 新增
  cloud:                                             # 新增
    subscribed-services: dubbo-provider              # 新增 订阅服务名
  registry:                                          # 新增
    address: spring-cloud://localhost                # 新增 挂载到 Spring Cloud 注册中心
  protocol:                                          # 新增 协议
    name: dubbo                                      # 新增 协议名称 dubbo
    port: -1                                         # 新增 dubbo 协议端口( -1 表示自增,从 20880 开始)

spring:
	  main:
	  	allow-bean-definition-overriding: true #新增 允许 bean 定义覆盖
	  ...省略
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  1. 服务消费方添加一个测试接口
    测试接口调用远程接口
    @Reference
    private TestService testService;

    @RequestMapping("/dubboTest")
    public String dubboTest() {
        return testService.dubboTest("来自消费者的调用");
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

注意:这里导入
访问服务消费方的测试接口TestService 是用dubbo@Reference注解

  1. 访问测试接口
    服务消费方成功调用服务提供方的接口,获取返回内容
    在这里插入图片描述

8.3 传递对象

  1. 自定义参数对象和结果对象
    在公共模块中创建Bean
@Getter
@Setter
public class Params implements Serializable {
    private String message;
    private Object object;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
@Getter
@Setter
public class Result implements Serializable {
    private Integer code;
    private String description;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

通过Dubbo框架传递的对象必须实现序列化接口Serializable,否则会报错

  1. api模块定义一个新接口
public interface TestService {
    Result dubboObjectTest(Params params); // 新增 对象传递测试接口
}
  • 1
  • 2
  • 3
  1. 服务提供方实现这个接口
@Service
public class TestServiceImpl implements TestService {
    ...
    public Result dubboObjectTest(Params params) {
        Result result = new Result();
        result.setCode(200);
        result.setDescription(String.format("这里是服务提供方,接收到参数[%s,%s]", params.getMessage(), params.getObject().toString()));
        return result;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  1. 服务消费方添加测试接口
    @RequestMapping("/dubboObjectTest")
    public Result dubboTest() {
        Params params = new Params();
        params.setMessage("呼叫远程服务");
        params.setObject("假装有数据");
        return testService.dubboObjectTest(params);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  1. 访问测试接口
    传递毛问题
    在这里插入图片描述
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/166051
推荐阅读
相关标签
  

闽ICP备14008679号