StackExchange.Redis, как подписаться на несколько каналов - PullRequest
0 голосов
/ 05 ноября 2018

Как я могу подписаться на несколько каналов? Насколько я понимаю, класс Channel, который необходимо передать методу Subscribe, поддерживает шаблонную или одноканальную подписку. Можно ли подписаться на несколько каналов одной командой?

Пример: Клиент публикует по 3 различным каналам: «ChannelA», «ChannelB» и «ChannelC». Как я могу подписаться на эти каналы в одной команде? Я знаю, что могу использовать шаблон типа «Канал *», но что, если эти каналы не могут быть описаны одним шаблоном? Подписка на «ChannelA, ChannelB, ChannelC» не работает - я не могу получить сообщение от ChannelMessageQueue.

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

psubscribe был использован в интерфейсе IRedisSubscription, тогда мы можем использовать subscription.SubscribeToChannelsMatching в c # просто дайте ему шаблон в соответствии с вашими потребностями, как эта строка

subscription.SubscribeToChannelsMatching (_config.ActiveChannelName);

мой пример использования для объединения сообщений в mongodb:

public void SubScribeChannel()
{
    string channelName = _config.ActiveChannelName;

    using (var redisConsumer = new RedisClient(_config.SingleHost))
    using (var subscription = redisConsumer.CreateSubscription())
    {
        subscription.OnSubscribe = channel =>
        {
            Debug.WriteLine(String.Format("Subscribed to '{0}'", channel));
        };
        subscription.OnUnSubscribe = channel =>
        {
            Debug.WriteLine(String.Format("UnSubscribed from '{0}'", channel));
        };
        subscription.OnMessage = async (channel, msg) =>
        {
            Debug.WriteLine(String.Format("Received '{0}' from channel '{1}'", msg, channel));
            List<Document> documents = Transformer.Deserialize<List<Document>>(msg);
            await MergeToMongoDb(documents, channelName);
        };

        try
        {
            Debug.WriteLine(String.Format("SubscribeToChannels: '{0}'", channelName));
            //subscription.SubscribeToChannels(channelName);
            subscription.SubscribeToChannelsMatching(_config.ActiveChannelName);
        }
        catch(Exception ex)
        {
            throw ex;
        }
    }

    Debug.WriteLine("EOF");
}

Значение ActiveChannelName является шаблоном типа "TestChannel *"

0 голосов
/ 06 ноября 2018

Вы можете использовать ПОДПИСАТЬСЯ :

PSUBSCRIBE Channel*

Это должно слушать любой канал, начинающийся с "Channel".

Или вы можете использовать ПОДПИСАТЬСЯ с несколькими каналами:

SUBSCRIBE ChannelA ChannelB ChannelMessageQueue

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...