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将接收来自上游客户端的消息,将它们代理到下游服务,接收来自下游服务的消息,并将它们代理给上游客户端。
已支持的
- 负载均衡
- 路由
- 服务发现
这意味着您可以运行websockets的下游服务,并在您的Route配置中使用多个DownstreamHostAndPorts,或将您的Route挂接到服务发现提供程序上,然后负载均衡上游请求…我认为这很酷:)
不支持的
不幸的是,很多Ocelot的功能都是非websocket所特有的,比如header和http客户端填充。 我列出了以下不适用的功能。
- 跟踪
- 请求Id
- 请求聚合
- 流量限制
- 服务质量
- 中间件注入
- 转换Header
- 委托处理程序
- 转换声明
- 缓存
- 认证 - 如果有人请求它,我们可能可以使用基本身份验证做些事情
- 授权
我不是100%确定这个功能在进入高速运转时会发生什么,所以请确保您彻底测试过!
本文介绍如何使用Ocelot代理WebSocket和SignalR通信。通过在应用程序中启用WebSockets和SignalR,配置ocelot.json文件,Ocelot能够代理WebSocket流量和SignalR通信至下游服务。此外,还支持负载均衡、路由和服务发现,但某些功能如头信息处理和HTTP客户端填充暂不支持。
918

被折叠的 条评论
为什么被折叠?



