Soul源码总结-01-18

1月18日作业

  • 预期目标
  • Sofa服务的发现,注册以及调用
    • Demo
    • 测试网关

预期目标

  • 运行examples下面的 sofa-rpc服务
  • 学习文档,结合sofa插件,发起http请求soul网关,体验sofa代理
  • 记录心得并总结

Sofa服务的发现,注册以及调用

Demo

首先启动soul-admin和soul-bootstrap项目,然后再soul-admin控制台插件管理可以看到sofa服务默认关闭,选择开启sofa服务。
在这里插入图片描述
此时如果直接启动示例项目soul-examples-sofa会抛出zookeeper not connected异常,在本地用docker-compose启动zookeeper集群后再次启动示例项目正常运行。如果使用

docker exec -it zookeeper_zoo2_1 zkCli.sh

与zk集群交互,可以看到以下信息,说明sofa服务已经顺利注册到zookeeper集群上

[zk: localhost:2181(CONNECTED) 6] ls /sofa-rpc
[org.dromara.soul.examples.dubbo.api.service.DubboTestService]

同时在soul-admindashboard会发现自定义sofa服务以及规则都已经注册到sofaplugin上:
在这里插入图片描述
那么sofa服务是如何被soul-admin注册和发现呢?和http, dubbo服务的注册发现机制类似,我们可以在示例项目中看到@SoulSofaClient注解,该注解可以让我们自定义的sofa服务被soul-admin发现和注册,同时我们通过打断点查看frames进行源码追踪,在这里插入图片描述
发现在SofaServiceBeanPostProcessor类中handler方法
Soul源码总结-01-18_第1张图片
通过jdk 反射拿到@SoulSofaClient注解的方法并将其post到soul-admin对应的/soul-client/sofa-registerendpoint上
Soul源码总结-01-18_第2张图片

测试网关

我们以findAll这个方法为例,发送http://localhost:9195/sofa/findAll请求
得到响应

{
     
    "code": 200,
    "message": "Access to success!",
    "data": {
     
        "name": "hello world Soul Sofa , findAll",
        "id": "998932133"
    }
}

但是如果此时sofa服务下线然后重新上线,控制台会打出一下错误日志:
在这里插入图片描述
手动删掉soul-admin中相关的sofa的selector以及rule,仍然打出错误日志,只能手动删表重新上线sofa服务才能解决问题。但与此对比的dubbo服务重新上线则不会有类似错误。这里应该是处理sofa插件的bug。等有空再打断点debug一下。

你可能感兴趣的:(Soul源码总结-01-18)