#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: не работает. Предложения:
- используйте отдельные серверы/порты для шаблонов prod и dev — не
- используйте активный шаблон (не отсутствие шаблона) для всех логических уровней/арендаторов
Комментарии:
1. Черт возьми, это было то, чего я боялся. redis.io/topics/pubsub документация-это то, что я процитировал, упомянув, что » все шаблоны в стиле глобуса действительны», и это то, от чего я зависел, чтобы быть точным.