美文网首页
Soul源码阅读 体验dubbo代理【第三天】

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

作者: cutieagain | 来源:发表于2021-01-16 23:03 被阅读0次

    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是如何写的?

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

    相关文章

      网友评论

          本文标题:Soul源码阅读 体验dubbo代理【第三天】

          本文链接:https://www.haomeiwen.com/subject/vzcnaktx.html