StackExchange.Redis 客户端订阅频道是否受限?
Is StackExchange.Redis client restricted when subscribed to a channel?
我想用StackExchange.Redis开发一个PUB/SUB消息队列。
在 StackExchange.Redis 文档中指定:
-The data is not sent via pub/sub; the pub/sub API is only used to notify workers to check for more work
所以我明白,一旦订阅的工作人员通过 PUB/SUB 检测到通知,我可能需要使用其他 Redis 操作(如 LPOP)来检查工作。
但是 Redis 参考指定:
Once the client enters the subscribed state it is not supposed to
issue any other commands, except for additional SUBSCRIBE, PSUBSCRIBE,
UNSUBSCRIBE and PUNSUBSCRIBE commands.
使用 StackExchange.Redis 我是否应该在我的订阅处理程序中创建另一个多路复用器来发出像 LPOP 这样的命令?
是否可以为订阅和其他命令共享同一个多路复用器?
我的工作人员在收到检查工作的通知时是否应该取消订阅?
您是否尝试使用共享多路复用器?
不,仅使用一个 ConnectionMultiplexer 并订阅您想要的任何东西并用它做其他事情绝对没有问题,因为 Stackexchange.Redis 客户端会为您完成所有幕后工作。它确实在内部处理订阅者的新连接。
意思是,不,您不必每次都创建一个新的多路复用器,不,您不必发出任何其他命令来使用订阅者。
只需创建一个新订阅者
ISubscriber sub = redis.GetSubscriber();
然后订阅任何你想要的
sub.Subscribe("messages", (channel, message) => {
Console.WriteLine((string)message);
});
或发送消息
sub.Publish("messages", "hello");
中所述
我想用StackExchange.Redis开发一个PUB/SUB消息队列。
在 StackExchange.Redis 文档中指定:
-The data is not sent via pub/sub; the pub/sub API is only used to notify workers to check for more work
所以我明白,一旦订阅的工作人员通过 PUB/SUB 检测到通知,我可能需要使用其他 Redis 操作(如 LPOP)来检查工作。
但是 Redis 参考指定:
Once the client enters the subscribed state it is not supposed to issue any other commands, except for additional SUBSCRIBE, PSUBSCRIBE, UNSUBSCRIBE and PUNSUBSCRIBE commands.
使用 StackExchange.Redis 我是否应该在我的订阅处理程序中创建另一个多路复用器来发出像 LPOP 这样的命令?
是否可以为订阅和其他命令共享同一个多路复用器?
我的工作人员在收到检查工作的通知时是否应该取消订阅?
您是否尝试使用共享多路复用器?
不,仅使用一个 ConnectionMultiplexer 并订阅您想要的任何东西并用它做其他事情绝对没有问题,因为 Stackexchange.Redis 客户端会为您完成所有幕后工作。它确实在内部处理订阅者的新连接。
意思是,不,您不必每次都创建一个新的多路复用器,不,您不必发出任何其他命令来使用订阅者。
只需创建一个新订阅者
ISubscriber sub = redis.GetSubscriber();
然后订阅任何你想要的
sub.Subscribe("messages", (channel, message) => {
Console.WriteLine((string)message);
});
或发送消息
sub.Publish("messages", "hello");
中所述