Soul网关源码探秘《三》 - Dubbo插件配置
运行 soul-examples-alibaba–dubbo-service
使用 brew 启动一个 zookeeper 服务,然后直接启动 soul-examples-alibaba–dubbo-service 项目。
之后需要在 soul-admin 中开启 dubbo 插件。
测试 dubbo 插件
在 postman 中发送请求 http://127.0.0.1:9195/dubbo/order/findById?id=5
,结果返回报错信息
此时在 bootstrap 控制台发现报错信息
按照图中报错信息全局查找 CheckUtils 这个类
发现到达这个类的时候已经出现了错误,这个类只是封装了返回的错误提示信息。之后根据左侧调用栈的信息进行排查。
发现问题主要出现在 AbstractSoulPlugin 的 execute 调用时,图中所示位置 selectorData 返回为空。
在 final SelectorData selectorData = matchSelector(exchange, selectors);
这儿不断打断点深入调用过程,最终发现错误的根源是我请求的 url 是 http://127.0.0.1:9195/dubbo/order/findById?id=5
,而 /dubbo/order/findById
并没有注册为 dubbo 中的服务,所以会去匹配 divide 中设置的匹配规则,自然就不能匹配成功。
再次请求 http://127.0.0.1:9195/dubbo/findById?id=5
,成功返回信息。
总结
虽然这个错误很低级,但通过不断调试,充分的领略到了一个道理:
没有什么 Bug 是一个断点不能解决的
而且在这个过程中,了解到了插件责任链中,每个插件是如何进行规则匹配的。