Ale*_*lls 2 redis node.js express
我有一台Node.js服务器-我希望该进程侦听自身发送的消息-这仅用于测试。我遇到的问题是,将消息发布到同一进程时,订阅者似乎根本没有收到消息。
我有这个设置:
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);
Run Code Online (Sandbox Code Playgroud)
我有一个Redis客户端,充当订阅者,一个作为发布者,这是您必须这样做的方式,但是由于某些原因,没有收到消息。进程不能听其发布的消息是否有某些限制?这似乎没有道理。我可以验证此代码或多或少正确,因为侦听同一频道的其他进程收到了该消息。
显然,SUBSCRIBE
命令是在PUBLISH
命令之后发送的。
节点的Redis客户端将命令排队,直到与Redis服务器建立连接为止,并且connect
在套接字上收到事件时,将排队的命令刷新到服务器。首先启动连接的客户端(发布者)最有可能connect
首先接收事件,此时它将发送其排队的命令(发布)。由于Redis在单个线程中处理命令,因此订阅者SUBSCRIBE
仅在PUBLISH
命令完成后才能执行。由于其他进程已经订阅了此频道,因此它们能够接收消息。
在大多数情况下,首先创建订户客户端应该可以工作,尽管更安全的方法是在发布任何消息之前等待订阅完成:
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);
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1589 次 |
最近记录: |