Stackexchange.Redis 频道订阅模式(排除)
Stackexchange.Redis Channel Subscription Patterns (exclusions)
我正在尝试为 Redis 订阅编写一个频道模式,这样,当我的应用程序处于调试模式时,我订阅所有以 _dev
结尾的频道,但当不处于调试模式时,我订阅了所有 不 以 _dev
结尾的频道。我的频道看起来像:CommandChannel_<id>
或 CommandChannel_<id>_dev
我了解到,根据文档,“所有 glob 样式模式都是有效的”,因此我编写了一个我认为应该可以解决问题的模式:
string subBase = "CommandChannel_"
redisSubscription.SubscribeAsync(subBase + "*" + (DEBUG ? "_dev": "!(_dev)"), async (channel, message) =>
{
// Do stuff
}
我发现的是,在 DEBUG 模式下,我的订阅工作正常 - 我正确地“捕获”了匹配 CommandChannel_<id>_dev
模式的任何频道上的所有消息。但是,当我将应用程序更改为不处于 DEBUG 模式时,尽管肯定会发布到适当的渠道 (CommandChannel_<id>
),但我的订阅并没有捕捉到任何东西。据我了解,!(_dev)
应排除任何以 _dev
结尾的频道,但允许我期望的所有其他频道。
我在这里错过了什么?
Redis本身不支持这种用法; relevant docs:
Supported glob-style patterns:
h?llo
subscribes to hello
, hallo
and hxllo
h*llo
subscribes to hllo
and heeeello
h[ae]llo
subscribes to hello
and hallo
, but not hillo
未提及排除项,并且在 redis-cli 中进行测试:不起作用。建议:
- 对产品和开发使用单独的 servers/ports - 而不是模式
- 对所有逻辑tiers/tenants
使用活动模式(不是缺少模式)
我正在尝试为 Redis 订阅编写一个频道模式,这样,当我的应用程序处于调试模式时,我订阅所有以 _dev
结尾的频道,但当不处于调试模式时,我订阅了所有 不 以 _dev
结尾的频道。我的频道看起来像:CommandChannel_<id>
或 CommandChannel_<id>_dev
我了解到,根据文档,“所有 glob 样式模式都是有效的”,因此我编写了一个我认为应该可以解决问题的模式:
string subBase = "CommandChannel_"
redisSubscription.SubscribeAsync(subBase + "*" + (DEBUG ? "_dev": "!(_dev)"), async (channel, message) =>
{
// Do stuff
}
我发现的是,在 DEBUG 模式下,我的订阅工作正常 - 我正确地“捕获”了匹配 CommandChannel_<id>_dev
模式的任何频道上的所有消息。但是,当我将应用程序更改为不处于 DEBUG 模式时,尽管肯定会发布到适当的渠道 (CommandChannel_<id>
),但我的订阅并没有捕捉到任何东西。据我了解,!(_dev)
应排除任何以 _dev
结尾的频道,但允许我期望的所有其他频道。
我在这里错过了什么?
Redis本身不支持这种用法; relevant docs:
Supported glob-style patterns:
h?llo
subscribes tohello
,hallo
andhxllo
h*llo
subscribes tohllo
andheeeello
h[ae]llo
subscribes tohello
andhallo
, but nothillo
未提及排除项,并且在 redis-cli 中进行测试:不起作用。建议:
- 对产品和开发使用单独的 servers/ports - 而不是模式
- 对所有逻辑tiers/tenants 使用活动模式(不是缺少模式)