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%确定这个功能在进入高速运转时会发生什么,所以请确保您彻底测试过!