.NET Core API网关Ocelot(十)【Websockets】

Ocelot额外支持代理websockets。这个功能在问题 212中被提出。

为了是Ocelot代理websocket,你需要做如下事情。

在你的Configure方法中,你要告知应用程序使用WebSockets

 Configure(app =>
{
    app.UseWebSockets();
    app.UseOcelot().Wait();
})

然后在你的ocelot.json中添加如下代码,用于配置WebSockets代理一个Route

{
     "DownstreamPathTemplate": "/ws",
     "UpstreamPathTemplate": "/",
     "DownstreamScheme": "ws",
     "DownstreamHostAndPorts": [
         {
             "Host": "localhost",
             "Port": 5001
         }
     ],
 }

使用这个配置,Ocelot将匹配所有进入/Websocket流量并将其代理到localhost:5001/ws。更清晰的解释一下就是,Ocelot将接收来自上游客户端的消息,并将它们代理到下游服务,从下游服务接收消息并将这些消息代理到上游客户端。

SignalR

Ocelot支持代理SignalR。 在发行344中要求此功能。

为了使Websocket代理与Ocelot一起使用,您需要执行以下操作。

安装Microsoft.AspNetCore.SignalR.Client 1.0.2,您可以尝试其他软件包,但此软件包已经过测试。

不要在IISExpress中运行它,也不要在IIS功能中安装websockets功能

在您的Configure方法中,您需要告诉您的应用程序使用SignalR

 Configure(app =>
{
    app.UseWebSockets();
    app.UseOcelot().Wait();
})

然后在您的ocelot.json中添加以下内容以使用SignalR代理Route。 请注意,通常的Ocelot路由规则适用的主要是设置为“ws”的方案。

  {
 "ReRoutes": [
   {
     "DownstreamPathTemplate": "/{catchAll}",
     "DownstreamScheme": "ws",
     "DownstreamHostAndPorts": [
       {
         "Host": "localhost",
         "Port": 50000
       }
     ],
     "UpstreamPathTemplate": "/gateway/{catchAll}",
     "UpstreamHttpMethod": [ "GET", "POST", "PUT", "DELETE", "OPTIONS" ]
   }
]
}

使用此配置集,Ocelot将匹配/上出现的任何SignalR通信并将其代理到localhost:5001/ws。 为了更加清楚,Ocelot将接收来自上游客户端的消息,将它们代理到下游服务,接收来自下游服务的消息,并将它们代理给上游客户端。

已支持的

  1. 负载均衡
  2. 路由
  3. 服务发现

这意味着您可以运行websockets的下游服务,并在您的Route配置中使用多个DownstreamHostAndPorts,或将您的Route挂接到服务发现提供程序上,然后负载均衡上游请求…我认为这很酷:)

不支持的

不幸的是,很多Ocelot的功能都是非websocket所特有的,比如headerhttp客户端填充。 我列出了以下不适用的功能。

  1. 跟踪
  2. 请求Id
  3. 请求聚合
  4. 流量限制
  5. 服务质量
  6. 中间件注入
  7. 转换Header
  8. 委托处理程序
  9. 转换声明
  10. 缓存
  11. 认证 - 如果有人请求它,我们可能可以使用基本身份验证做些事情
  12. 授权

我不是100%确定这个功能在进入高速运转时会发生什么,所以请确保您彻底测试过!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值