订阅频道时StackExchange.Redis客户端是否受到限制?

时间:2017-02-03 04:33:05

标签: redis publish-subscribe stackexchange.redis

我想使用StackExchange.Redis开发PUB / SUB消息队列。

在StackExchange.Redis文档中指定:

  

- 数据不通过pub / sub发送; pub / sub API仅用于通知工作人员检查更多工作

所以我理解,一旦订阅的工作人员通过PUB / SUB检测到通知,我可能需要使用其他redis操作(如LPOP)来检查工作。

但Redis参考指定:

  

一旦客户端进入订阅状态,就不应该这样做   发出任何其他命令,除了额外的SUBSCRIBE,PSUBSCRIBE,   UNSUBSCRIBE和PUNSUBSCRIBE命令。

使用StackExchange.Redis我应该在我的订阅处理程序中创建另一个Multiplexer来发出像LPOP这样的命令吗?

是否可以为订阅和其他命令共享相同的多路复用器?

我的工作人员在收到检查工作的通知时是否应取消订阅?

1 个答案:

答案 0 :(得分:1)

您是否尝试使用共享多路复用器?

没有绝对没有问题,只使用一个ConnectionMultiplexer并订阅你想要的东西,并用它做其他事情,因为Stackexchange.Redis客户端为你做了幕后的所有事情。它确实在内部处理订户的新连接。

意思是,不,您不必每次都创建一个新的多路复用器,不,您不必发出任何其他命令来使用该用户。

只需创建一个新订阅者

ISubscriber sub = redis.GetSubscriber();

然后订阅你想要的任何东西

sub.Subscribe("messages", (channel, message) => {
    Console.WriteLine((string)message);
});

或发送消息

sub.Publish("messages", "hello");

正如Marc's docs

中所述