我想使用StackExchange.Redis开发PUB / SUB消息队列。
在StackExchange.Redis文档中指定:
- 数据不通过pub / sub发送; pub / sub API仅用于通知工作人员检查更多工作
所以我理解,一旦订阅的工作人员通过PUB / SUB检测到通知,我可能需要使用其他redis操作(如LPOP)来检查工作。
但Redis参考指定:
一旦客户端进入订阅状态,就不应该这样做 发出任何其他命令,除了额外的SUBSCRIBE,PSUBSCRIBE, UNSUBSCRIBE和PUNSUBSCRIBE命令。
使用StackExchange.Redis我应该在我的订阅处理程序中创建另一个Multiplexer来发出像LPOP这样的命令吗?
是否可以为订阅和其他命令共享相同的多路复用器?
我的工作人员在收到检查工作的通知时是否应取消订阅?
答案 0 :(得分:1)
您是否尝试使用共享多路复用器?
没有绝对没有问题,只使用一个ConnectionMultiplexer并订阅你想要的东西,并用它做其他事情,因为Stackexchange.Redis客户端为你做了幕后的所有事情。它确实在内部处理订户的新连接。
意思是,不,您不必每次都创建一个新的多路复用器,不,您不必发出任何其他命令来使用该用户。
只需创建一个新订阅者
ISubscriber sub = redis.GetSubscriber();
然后订阅你想要的任何东西
sub.Subscribe("messages", (channel, message) => {
Console.WriteLine((string)message);
});
或发送消息
sub.Publish("messages", "hello");
中所述