Redis pub / sub – 同一个进程监听一个通道

我有一个单独的Node.js服务器 – 我希望进程能够监听从它自己发送的消息 – 这仅用于testing。 我遇到的问题是,当向相同的进程发布消息时,用户似乎根本没有收到它。

我有这个设置:

var redis = require('redis'); var rcPub = redis.createClient(); var rcSub = redis.createClient(); var message = String('testing123'); rcSub.subscribe('redis_channel@test_overall_health'); rcSub.on('message', function (channel, msgs) { console.log(channel,msgs); }); rcPub.publish('redis_channel@test_overall_health', message); 

我有一个redis客户端充当订户,一个作为发布者,这是您必须这样做的方式,但由于某种原因,邮件没有收到。 是否有一个限制,一个进程不能听它发布的消息? 这似乎没有道理。 我可以validation这个代码或多或less是正确的,因为侦听同一个通道的其他进程收到了这个消息。

显然, SUBSCRIBE命令是在PUBLISH命令之后发送的。

节点的Redis客户端队列命令,直到与Redis服务器build立connect并在套接字上收到connect事件时,将排队的命令刷新到服务器。 首先发起连接的客户端(发布者)很可能会首先收到connect事件,然后发送排队的命令(发布)。 由于Redis在单个线程中处理命令,因此只有在PUBLISH命令完成之后,订户SUBSCRIBE才会被执行。 其他进程能够接收到消息,因为他们已经订阅了这个频道。

首先创build订阅者客户端应该在大多数情况下工作,尽pipe更安全的方法是在发布任何消息之前等待订阅完成:

 var redis = require('redis'); var publisher = redis.createClient(), subscriber = redis.createClient(), message = 'testing123'; subscriber.subscribe('redis_channel@test_overall_health'); subscriber.on('message', function (channel, message) { console.log(channel, message); }); subscriber.on('subscribe', function (channel, count) { publisher.publish('redis_channel@test_overall_health', message); });