Я использую канал Redis pubsub для отправки сообщений из пула рабочих процессов в мое приложение ASP.NET. Когда сообщение получено, мое приложение пересылает его в браузер клиента с помощью SignalR.
Я нашел это решение для поддержания открытого соединения с Redis, но оно не учитывает подписки при повторном создании соединения.
В настоящее время я обрабатываю сообщения Redis pubsub в файле Global.asax.:
public class Application : HttpApplication
{
protected void Application_Start()
{
var gateway = Resolve();
var connection = gateway.GetConnection();
var channel = connection.GetOpenSubscriberChannel();
channel.PatternSubscribe("workers:job-done:*", OnExecutionCompleted);
}
///
/// Handle messages received from workers through Redis.
private static void OnExecutionCompleted(string key, byte[] message)
{
/* forwarded the response to the client that requested it */
}
}
Проблема возникает, когда текущий RedisConnection закрывается по какой-либо причине. Самым простым решением проблемы было бы запустить событие из класса RedisConnectionGateway
при сбросе соединения и повторно подписаться с использованием нового RedisSubscriberChannel
. Однако любые сообщения, опубликованные на канале во время сброса соединения, будут потеряны.
Есть ли примеры рекомендуемых способов разрешения этой ситуации?