Redis发布/订阅多个消费者

时间:2019-11-27 00:09:09

标签: node.js redis publish-subscribe

我有一个小型系统,该系统使用Redis的pub子功能进行事件消息传递。我正在使用带有Redis库的nodejs。

我制作了一个小脚本,可以使我的消费者更加容易,问题是当我收到任何事件时,每个人都在运行,而不仅仅是我想要的那个。

这是我的脚本:

const DrawerNavigator = createDrawerNavigator({
 ...
 CallUsDrawer: {
      screen: () => Linking.openURL(`tel:0597093830`),
      navigationOptions: {
        drawerLabel: 'call us',
        drawerIcon: () => <Icon name="ios-call" size={28} color="#1E558E" />,
      },
    },
 ...
}); 

然后,在我的消费者中,我这样称呼它:

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”事件时,也会调用publicationWasCreated,由于某种原因,这也会监听其他事件。

我该如何解决?我在这里做错了什么?我的脚本肯定是问题所在,但我不知道为什么

1 个答案:

答案 0 :(得分:0)

好的,我可以用一个简单的方法修复它,我只验证通道和事件是否相同:

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

不是最美丽的方法,但是它可以工作。

如果有更好的答案,我将让问题待一会儿。