Обмен стеками.Шаблоны подписки на каналы Redis (исключения)

#c# #redis #glob #stackexchange.redis

Вопрос:

Я пытаюсь написать шаблон канала для подписки Redis таким образом, чтобы, когда мое приложение находится в режиме отладки , я подписывался на все каналы, заканчивающиеся _dev , но когда не в режиме отладки, я подписываюсь на все каналы, которые конкретно не заканчиваются _dev . Мои каналы выглядят примерно так: CommandChannel_<id> или CommandChannel_<id>_dev

Я понимаю, что, согласно документации, «все шаблоны в стиле глобуса действительны», и поэтому я написал шаблон, который, по моему мнению, должен сработать:

 string subBase = "CommandChannel_"
redisSubscription.SubscribeAsync(subBase   "*"   (DEBUG ? "_dev": "!(_dev)"), async (channel, message) =>
{
    // Do stuff
}
 

Я нахожу, что в режиме ОТЛАДКИ моя подписка работает нормально — я правильно «ловлю» все сообщения по любому каналу, соответствующему шаблону CommandChannel_<id>_dev . Но когда я меняю приложение, чтобы оно не находилось в режиме ОТЛАДКИ, моя подписка ничего не улавливает, несмотря на то, что она определенно публикуется на соответствующих каналах ( CommandChannel_<id> ). Как я понимаю, !(_dev) следует исключить любые каналы , заканчивающиеся на _dev , но разрешить все остальные каналы, которые я ожидаю.

Что я здесь упускаю?

Ответ №1:

Сам Redis не поддерживает такое использование; соответствующие документы:

Поддерживаемые шаблоны в стиле глобуса:

  • h?llo подписывается на hello , hallo и hxllo
  • h*llo подписывается на hllo и heeeello
  • h[ae]llo подписывается на hello и hallo , но не hillo

Исключения не упоминаются, и из тестирования в redis-cli: не работает. Предложения:

  1. используйте отдельные серверы/порты для шаблонов prod и dev — не
  2. используйте активный шаблон (не отсутствие шаблона) для всех логических уровней/арендаторов

Комментарии:

1. Черт возьми, это было то, чего я боялся. redis.io/topics/pubsub документация-это то, что я процитировал, упомянув, что » все шаблоны в стиле глобуса действительны», и это то, от чего я зависел, чтобы быть точным.