soul网关学习笔记五

目录

一、sofa服务调用过程

二、今天的学习分析、总结


 

       今天是学习soul网关的第五天,前几天学会了http、dubbo、sofa协议的项目是如何接入soul网关的,今天来了解下网关是如何调用对应的服务。

一、sofa服务调用过程

昨天搞明白如何在sofa协议的项目中接入soul网关,并且也调试成功。但是网关是如何调用业务服务的呢?今天以sofa插件为例子,去探索soul网关。

在soul-admin上看见过很多的Plugin,很明显的源码也是如此命名,很容易的找到SofaPlugin.java,查看其源码:

       在doExecute()方法里打个断点,然后继续使用我们的老朋友postman请求服务:

 请求进入断点后发现其上层调用:是WebHandler.java

       对这个类不太了解,查了下资料,是响应式编程WebFlux的类,结构如下:

参考资料:https://www.cnblogs.com/niechen/p/9303451.html 

       WebHandler是WebFlux处理请求的入口,SoulWebHandler实现了该接口,接着查看它的调用链:

大致思路就是在SoulWebHandler.execute里查找到对应的插件,然后根据该插件配置的选择器,规则、权重通过代理调用业务方接口。

       选择插件:

@Override

public Mono<Void> execute(final ServerWebExchange exchange) {

    return Mono.defer(() -> {

        if (this.index < plugins.size()) {

            SoulPlugin plugin = plugins.get(this.index++);

            Boolean skip = plugin.skip(exchange);

            if (skip) {

                return this.execute(exchange);

            }

            return plugin.execute(exchange, this);

        }

        return Mono.empty();

    });

}

当我debug到SofaProxyService. genericInvoker ()的这里,这里根据元数据(MetaData)获取了对应的接口类,方法,以及参数内容,但是选择哪个业务服务,目前还没有找到对应的代码。

ConsumerConfig<GenericService> reference = ApplicationConfigCache.getInstance().get(metaData.getPath());

if (Objects.isNull(reference) || StringUtils.isEmpty(reference.getInterfaceId())) {

    ApplicationConfigCache.getInstance().invalidate(metaData.getServiceName());

    reference = ApplicationConfigCache.getInstance().initRef(metaData);

}

GenericService genericService = reference.refer();

       明天继续刚genericService.invoke(),弄明白,是如何调用具体的业务服务,难道在这之前,先获取了某个业务服务??

 

二、今天的学习分析、总结

Debug代码时很有意思的事,一步步的揭开真相……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值