1月18日作业
预期目标
- 运行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-admin
dashboard会发现自定义sofa服务以及规则都已经注册到sofa
plugin上:
那么sofa服务是如何被soul-admin注册和发现呢?和http, dubbo服务的注册发现机制类似,我们可以在示例项目中看到@SoulSofaClient
注解,该注解可以让我们自定义的sofa服务被soul-admin发现和注册,同时我们通过打断点查看frames
进行源码追踪,
发现在SofaServiceBeanPostProcessor
类中handler
方法
通过jdk 反射拿到@SoulSofaClient
注解的方法并将其post到soul-admin
对应的/soul-client/sofa-register
endpoint上
测试网关
我们以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一下。