.Net Core SignalR 服务器到服务器重新连接



我正在尝试了解有关在 Web 套接字服务出现故障时将 websocket 连接服务器重新连接到服务器的更多信息。 我已经很好地查看了文档和其他问题(主要是查找客户端到服务器),但无法决定我要实现的内容。

因此,目标是当服务 A 启动时,我让微服务 A 连接到微服务 B 上的 Web 套接字。 一切正常,但是当我关闭服务 B 时,当我启动 B 备份时,服务 A 中的 HubConnection 状态始终断开连接。 例如使用Microsoft.AspNetCore.SignalR.Client 1.1.0

public class MessageHubProxy : IMessageHubProxy 
{
private readonly HubConnection _hubConnection;
public MessageHubProxy()
{
_hubConnection = new HubConnectionBuilder().WithUrl("http://localhost:54994/messageHub").Build();
InitiateConenction().Wait();
}
private async Task InitiateConenction()
{
await _hubConnection.StartAsync();
}
public void AddMessage(string message)
{
_hubConnection.InvokeAsync("addMessage", post);
}
}

当我停止并启动服务 B 并调用 AddMessage 后查看 AddMessage 中的_hubConnection时。我在HubConnection上看到以下属性:

HandshakeTimeout: 15 seconds,
KeepAliveInterval: 15 seconds,
ServerTimeout: 30 seconds,
State: Disconnected

从我读到的内容来看,也许我仍然误解了HandshakeTimeout,KeepAliveInterval和ServerTimeout的使用......也许我可以在服务B启动并运行后使用其中之一让服务A重新连接? 或者我看到HubConnection类型有.On<>,也许我需要捕获断开连接并手动调用重试? 从这个意义上讲,我如何处理服务器到服务器重新连接的任何信息都非常感谢!

当连接失败时,可以使用 Polly。 https://github.com/App-vNext/Polly

public class MessageHubProxy : IMessageHubProxy 
{
private readonly HubConnection _hubConnection;
public MessageHubProxy()
{
_hubConnection = new HubConnectionBuilder().WithUrl("http://localhost:54994/messageHub").Build();
Policy
.Handle<Exception>()
.WaitAndRetry(5, r => TimeSpan.FromSeconds(5), (ex, ts) => { Log.Error("Error connecting to DB. Retrying in 5 sec."); })
.Execute(() => InitiateConenction());
}
private async Task InitiateConenction()
{
await _hubConnection.StartAsync();
}
public void AddMessage(string message)
{
_hubConnection.InvokeAsync("addMessage", post);
}
}

最新更新