gpt4 book ai didi

node.js - Redis pub/sub - 同一进程监听一个 channel

转载 作者:IT王子 更新时间:2023-10-29 06:03:58 24 4
gpt4 key购买 nike

我有一个 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);

我有一个 redis 客户端充当订阅者,一个充当发布者,这是您必须执行的方式,但由于某种原因没有收到消息。进程不能收听它发布的消息是否有一些限制?这似乎没有意义。我可以验证此代码或多或少是正确的,因为监听同一 channel 的其他进程收到了消息。

最佳答案

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

Node 的 Redis 客户端将命令排队,直到与 Redis 服务器建立连接,并在套接字上收到 connect 事件时将排队的命令刷新到服务器。首先发起连接的客户端(发布者)很可能会首先收到 connect 事件,此时它将发送其排队的命令(发布)。因为 Redis 在单个线程中处理命令,所以订阅者 SUBSCRIBE 仅在 PUBLISH 命令完成后才会发生。其他进程能够接收消息,因为它们已经订阅了该 channel 。

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

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);
});

关于node.js - Redis pub/sub - 同一进程监听一个 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30946799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com