Soul源码阅读 体验dubbo代理【第三天】

dubbo接入参考文档

https://dromara.org/zh-cn/docs/soul/user-dubbo.html

体验基础的dubbo代理功能

1、启动ZooKeeper,默认2181端口

1.1、少了Bootstrap的pom依赖 alibaba dubbo

<!--soul alibaba dubbo plugin start-->
        <dependency>
            <groupId>org.dromara</groupId>
            <artifactId>soul-spring-boot-starter-plugin-alibaba-dubbo</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>${alibaba.dubbo.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-client</artifactId>
            <version>${curator.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>${curator.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>${curator.version}</version>
        </dependency>
        <!-- soul  alibaba dubbo plugin end-->

1.2、配置文件

sync:
      websocket :
           urls: ws://localhost:9095/websocket
      zookeeper:
           url: localhost:2181
           sessionTimeout: 5000
           connectionTimeout: 2000

2、启动 soul-examples-apache-dubbo-service 的 TestApacheDubboApplication

查看下控制台中的启动日志,启动在8011端口,已经注册上带 @SoulDubboClient 注解的服务,日志上面也可以看出dubbo注册的时候需要用到的属性

{
    "appName": "dubbo",
    "contextPath": "/dubbo",
    "path": "/dubbo/findById",
    "pathDesc": "Query by Id",
    "rpcType": "dubbo",
    "serviceName": "org.dromara.soul.examples.dubbo.api.service.DubboTestService",
    "methodName": "findById",
    "ruleName": "/dubbo/findById",
    "parameterTypes": "java.lang.String",
    "rpcExt": "{\\"group\\":\\"\\",\\"version\\":\\"\\",\\"loadbalance\\":\\"random\\",\\"retries\\":2,\\"timeout\\":10000,\\"url\\":\\"\\"}",
    "enabled": true
}

2、请求url http://localhost:9195/dubbo/findById?id=1 发现走昨天的全部请求那边过了,保存的时候发现报错,Line 1 upstreamHost, upstreamUrl and weight can not be null,昨天保存的host,protocal,ip:port不见了,找了一下mysql中soul数据库,selector表中的handle字段不见了,是否哪里同步出了bug?暂时不知道哪里出问题了。。

image.png

3、发现插件忘记开启,开启插件,重新请求 http://localhost:9195/dubbo/findById?id=1 ,请求成功,返回如下

{
    "code": 200,
    "message": "Access to success!",
    "data": {
        "name": "hello world Soul Apache, findById",
        "id": "1"
    }
}

但是调用的时候,soul-bootstrap 报警告,这个是否是正常现象?需要后面看一下

2021-01-16 22:23:16.432 ERROR 7476 --- [-work-threads-4] o.d.soul.plugin.base.utils.CheckUtils    : can not match selector data: divide

<dependency>
            <groupId>org.dromara</groupId>
            <artifactId>soul-examples-dubbo-api</artifactId>
        </dependency>

后续可以看的以及考虑的内容:

多参数和单参数调用有什么区别?

dubbo的元数据注册,通知,应该和http调用的配置同步是一致的,就是保存的地方不一样。

http代理也好,dubbo代理也好,首先是匹配选择器,然后是匹配规则,执行调用的整个过程(dubbo泛化调用)

以前都是自己写一个前端调用,调用dubbo的服务,如果直接使用Soul网关调用是否有什么弊端?

springboot-start是如何写的?

网关整个的思路就是做一个协议的转发,规则匹配什么的越快越好。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容