Поддержание открытой подписки Redis PubSub с помощью Booksleeve

Я использую канал 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. Однако любые сообщения, опубликованные на канале во время сброса соединения, будут потеряны.

Есть ли примеры рекомендуемых способов разрешения этой ситуации?

7
задан Community 23 May 2017 в 11:48
поделиться