我正在使用 Redis pubsub 通道将消息从工作进程池发送到我的 ASP.NET 应用程序。收到消息后,我的应用程序使用 SignalR 将消息转发到客户端的浏览器。
我找到了维护与 Redis 的开放连接的解决方案,但它在重新创建连接时不考虑订阅。
我目前正在 Global.asax 文件中处理 Redis pubsub 消息:
public class Application : HttpApplication
{
protected void Application_Start()
{
var gateway = Resolve<RedisConnectionGateway>();
var connection = gateway.GetConnection();
var channel = connection.GetOpenSubscriberChannel();
channel.PatternSubscribe("workers:job-done:*", OnExecutionCompleted);
}
/// <summary>
/// Handle messages received from workers through Redis.</summary>
private static void OnExecutionCompleted(string key, byte[] message)
{
/* forwarded the response to the client that requested it */
}
}
当当前的 RedisConnection 出于某种原因关闭时,就会出现问题。问题的最简单解决方案是RedisConnectionGateway
在连接重置后从类中触发一个事件,然后使用新的RedisSubscriberChannel
. 但是,在重置连接时发布到通道的任何消息都将丢失。
是否有处理这种情况的推荐方法示例?