我有一个小型系统,该系统使用Redis的pub子功能进行事件消息传递。我正在使用带有Redis库的nodejs。
我制作了一个小脚本来使我的消费者更容易,问题是当我收到任何事件时,每个人都在运行,而不仅仅是我想要的那个。
这是我的脚本:
const redis = require("redis"); const subscriberClient = redis.createClient(redisConf); const subscribe = (event, callback) => { subscriberClient.on("message", (channel, message) => { console.log("log: ", { channel, message }); callback(JSON.parse(message)); }); subscriberClient.subscribe(event); };
然后,在我的消费者中,我这样称呼它:
const init = () => { eventHandler.subscribe("userWasRegistered", message => console.log("save the registered user here", message) ); };
另一个这样的消费者:
const init = () => { eventHandler.subscribe("publicationWasCreated", message => console.log("save the publication data", message) ); };
我在一个文件中呼叫所有使用者以执行所有程序,然后可以监听事件:
userWasRegistered.init(); publicationWasCreated.init();
[问题是,例如,当我发送“ userWasRegistered”事件时,也会调用publicationWasCreated,由于某种原因,这也会监听其他事件。
我该如何解决?我在这里做错了什么?我的脚本肯定是问题所在,但我不知道为什么
我有一个小型系统,该系统使用Redis的pub子功能进行事件消息传递。我正在使用带有redis库的nodejs。我制作了一个小脚本,以使我的消费者更轻松,... ...>
好,我可以用一个简单的方法修复它,我只验证通道和事件是否相同:
const subscribe = (event, callback) => {
subscriberClient.on("message", (channel, message) => {
console.log("channel: ", channel);
console.log("event: ", event);
if (channel === event) {
console.log("log: ", { channel, message });
callback(JSON.parse(message));
}
});
subscriberClient.subscribe(event);
};