.NET Core API网关Ocelot(十七)【委托处理程序,Raft(实验功能不能用于生产环境)】

Ocelot允许用户将委托处理程序添加到HttpClient传输中。 这个功能在github #208中提出,我确定它会以各种方式被使用。之后我们在GitHub#264中进行了扩展。

用法

为了将委托处理程序添加到HttpClient传输中,有两件重要的事情要做。

首先,为了创建一个可以用于委托处理程序的类,它必须如下所示。 我们将在asp.net core容器中注册这些处理程序,以便您可以将您已注册的其他服务注入到处理程序的构造函数中。

public class FakeHandler : DelegatingHandler
{
    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        //do stuff and optionally call the base handler..
        return await base.SendAsync(request, cancellationToken);
    }
}

其次,您必须将处理程序添加到Ocelot的容器。

services.AddOcelot()
        .AddDelegatingHandler<FakeHandler>()
        .AddDelegatingHandler<FakeHandlerTwo>()

这两个Add方法都具有一个称为global的默认参数,该参数设置为false。 如果为false,则DelegatingHandler需要通过ocelot.json设置特定的Routes(稍后会详细介绍)。 如果将其设置为true,则它将成为全局处理程序并将应用于所有Route

例如
如下…

services.AddOcelot()
        .AddDelegatingHandler<FakeHandler>(true)

最后,如果你想要Route指定DelegatingHandlers为你的特定DelegatingHandlers,或全局(稍后会详细介绍)DelegatingHandlers,那么你必须将下面的json添加到ocelot.json中的特定Route中。 数组中的名称必须与您的DelegatingHandlers类名匹配,以便Ocelot将它们匹配在一起。

"DelegatingHandlers": [
    "FakeHandlerTwo",
    "FakeHandler"
]

你可以有多个DelegatingHandlers,他们的运行顺序如下:

  1. 所有在服务中并且不在ocelot.jsonDelegatingHandlers数组中的全局处理程序按加入的顺序排序。
  2. 所有非全局的DelegatingHandlers以及来自ocelot.jsonDelegatingHandlers数组中的所有全局变量都按照它们在DelegatingHandlers数组中的顺序排列。
  3. 如果启用了跟踪,那么这一步是跟踪DelegatingHandler(看跟踪文档).
  4. 如果启用了QoS,那么这一步是QoS DelegatingHandler (看服务质文档).
  5. HttpClient发生HttpRequestMessage.

希望其他人会洞悉这个功能是很有用的!


Raft

Ocelot最近整合了Rafty,这是我在去年一直研究的Raft的一个实现。 这个项目实验性非常强,所以在我认为它没问题之前,请不要在生产环境中使用Ocelot的这个功能。

Raft是一种分布式一致性算法,它允许一组服务器(Ocelots)保持本地状态,而不需要一个集中式数据库(例如SQL Server)存储状态。

要获得Raft支持,您必须首先安装Ocelot Rafty软件包。

Install-Package Ocelot.Provider.Rafty

为了在Ocelot中启用Rafty,您必须对Startup.cs / Program.cs进行以下改动。

public virtual void ConfigureServices(IServiceCollection services)
{
     services
        .AddOcelot()
        .AddAdministration("/administration", "secret")
        .AddRafty();
}

除此之外,您还必须在您的主项目中添加名为peers.json的文件,其内容看起来如下所示:

{
    "Peers": [{
            "HostAndPort": "http://localhost:5000"
        },
        {
            "HostAndPort": "http://localhost:5002"
        },
        {
            "HostAndPort": "http://localhost:5003"
        },
        {
            "HostAndPort": "http://localhost:5004"
        },
        {
            "HostAndPort": "http://localhost:5001"
        }
    ]
}

Ocelot的每个实例必须在数组中有它的地址,以便它们可以使用Rafty进行通信。

完成这些配置更改后,您必须使用peers.json文件中的地址部署和启动Ocelot的每个实例。 然后服务器应该开始彼此通信! 您可以通过发布配置更新来检测一切是否正常工作,并通过配置来检查它是否已复制到所有服务器。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值