【无标题】

学习.NetCore框架Surging系列

在csdn上看到了一个分析的很棒的大佬,还给出了清晰的流程图:https://blog.csdn.net/yiquan_yang/article/details/108279860
这边贴一下他的地址

还有这个大佬的解析:https://jaycewu.gitee.io/netcore-turorial/#/surging/%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%BB%A3%E7%90%86%E8%B0%83%E7%94%A8

我从路由这部分开始做笔记吧

1、路由注册

Surging路由注册和发现的基本单位为API方法,也就是说注册的是各个服务中的各个方法,网关和Rpc调用时通过路由地址找到对应方法和分配到相应的服务器,在Consul中以Key/Value形式保存。

注册路由
一开始serviceRoutes从注册中心取不回数据,说明这个路由还没有被注册过

public override async Task SetRoutesAsync(IEnumerable<ServiceRoute> routes)
{
    var serviceRoutes = await GetRoutes(routes.Select(p => $"{ _configInfo.RoutePath}{p.ServiceDescriptor.Id}"));
    foreach (var route in routes)
    {
        var serviceRoute = serviceRoutes.Where(p => p.ServiceDescriptor.Id == route.ServiceDescriptor.Id).FirstOrDefault();
        if (serviceRoute != null)
        {
            route.Address = serviceRoute.Address.Concat(
                route.Address.Except(serviceRoute.Address));
        }
    }
    await RemoveExceptRoutesAsync(routes);
    await base.SetRoutesAsync(routes);
}

然后执行RemoveExceptRoutesAsync,这个方法是用来筛选出要删除的注册中心的路由: 如果调用地址相同,则删除注册中心的旧路由。
再SetRoutesAsync,将路由注册到注册中心。

2、路由发现
也就是如何根据请求路由找到服务器相关信息。
在这里插入图片描述

调用一个新的地址,在_dictionary中不存在这个地址的情况下,就会把这个地址添加进_dictionary中
所以说不是注册了的地址都会进行路由监听,只有被调用过的地址才会被监听

3、路由监听
路由监听,是每隔十秒都会对_dictionary中的地址进行遍历检查它是否健康,并移除连续不健康次数>=6的服务地址
每次路由更新、增加的时候都会调用委托重新监控;路由被移除时候移除这个路由调用委托remove

而且比较有意思的是,它默认_dictionary里面的地址都是健康的,不在这里面的地址才会去对它走check是否健康的逻辑,也就是调用一下这个接口看是否有返回值。

这部分就是路由相关的逻辑,我看的也不是很仔细,之后还会继续更新~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值