soul网关系列(三):Dubbo服务运行soul实例和Dubbo概述

soul中的dubbo插件是将http协议 转换成dubbo协议 的插件,也是网关实现dubbo泛化调用的关键

一、dubbo服务运行实例

1.1 前置条件

  • JDK1.8
  • mysql
  • 启动soul-admin

1.2 配置依赖

在soul-bootstrap中添加依赖,以alibaba dubbo2.6.5为例

<!--soul alibaba dubbo plugin start-->
<dependency>
    <groupId>org.dromara</groupId>
    <artifactId>soul-spring-boot-starter-plugin-alibaba-dubbo</artifactId>
    <version>2.2.1</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.6.5</version>
</dependency>
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-client</artifactId>
    <version>4.0.1</version>
</dependency>
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-framework</artifactId>
    <version>4.0.1</version>
</dependency>
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>4.0.1</version>
</dependency>
<!-- soul  alibaba dubbo plugin end-->

1.3 开启插件

在这里插入图片描述

1.3 zookeeper安装

参考链接
分别启动zkServer和zkCli进行验证
在这里插入图片描述

1.4 dubbo服务的接入的三个步骤

  • springboot引入依赖
<dependency>
    <groupId>org.dromara</groupId>
    <artifactId>soul-spring-boot-starter-client-alibaba-dubbo</artifactId>
    <version>${soul.version}</version>
</dependency>
  • 在yml文件中增加配置
soul:
  dubbo:
    adminUrl: http://localhost:9095
    contextPath: /dubbo
    appName: dubbo
  • 把接口注册到网关
@Override
@SoulDubboClient(path = "/findById", desc = "根据用户查询")
public DubboTest findById(final String id) {
    DubboTest dubboTest = new DubboTest();
    dubboTest.setId(id);
    dubboTest.setName("hello world Soul Alibaba Dubbo, findById");
    return dubboTest;
}

1.5 启动服务,验证接入成功

在这里插入图片描述
在这里插入图片描述

1.6 postman进行验证

  • 支持Params
    在这里插入图片描述
  • 支持Body中的json格式
    在这里插入图片描述

二、soul网关dubbo模块初步分析

2.1 元数据

元数据个人猜测是区别于正规的HTTP路径,针对RPC框架提供的调用方法,记录方法等原始信息,要保证原始数据的完整性,理论上粗暴一点没有也可以,不过不方便RPC调用方法的直观理解,path不一定等同于方法名。

  • 每个dubbo接口方法,对应一条元数据。
  • springcloud协议,只会存储一条数据, path为 /contextPath/**。
  • http服务,则不会有任何数据。

官方文档上讲,主要是dubbo的泛化调用上使用,泛化调用是dubbo的基本特性,就是服务消费者不需要有任何接口的实现,就能完成服务的调用。

其中

path 字段,在请求网关的时候,会根据你的path字段来匹配到一条数据,然后进行后续的流程.
rpc_ext字段,如果是dubbo类型的服务接口,且服务接口设置了group和version字段的时候,会存在这个字段。存储结构如下

public static class RpcExt {
    private String group;
    private String version;
    private String loadbalance;
    private Integer retries;
    private Integer timeout;
}

2.2 dubbo用户请求的流程

  1. 原理就是通过http的方式来请求你的dubbo服务,把方法调用转换成和HTTP一样的逻辑
  2. soul网关需要有一个路由前缀,这个路由前缀就是你接入项目进行配置 contextPath
  3. 参数传递支持多种类型,如上面的Params和json等
  4. HTTP请求,转换成dubbo协议,内部使用dubbo泛化来进行调用(@SoulDubboClient注解里加了个path)

2.3 dubbo插件核心类

在这里插入图片描述

三、参考链接

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页