【问题标题】:How to make asynchronous Redis subscriber call如何进行异步 Redis 订阅者调用
【发布时间】:2020-07-20 15:49:40
【问题描述】:

我在 AWS ElastiCache 中有一个 Redis 服务器。将消息发布到 Redis 通道。并试图通过订阅来获取消息。我正在使用如下的 Javascript 示例。

const redis = require("redis");

const subscriber = redis.createClient();

let messageCount = 0;

subscriber.on("message", function(channel, message) {
  messageCount += 1;

  console.log("Subscriber received message in channel '" + channel + "': " + message);

  if (messageCount === 2) {
    subscriber.unsubscribe();
    subscriber.quit();
  }
});

subscriber.subscribe("my_channel");

到目前为止我作为一个JS新手了解,上面的示例是一个同步调用。

现在我想让订阅者消息调用异步可能如下所示:

await subscriber.onAsync('message').then(function(channel, message){
  console.log(JSON.stringify(message)); 
}).catch(function(e){
    console.log(e);
});

基本上我会在 AWS Lambda 中使用这个异步调用。

我一直在谷歌搜索,但仍然没有运气。 如果有类似的Q/A,请分享给我。

谢谢。

【问题讨论】:

    标签: javascript node.js redis


    【解决方案1】:

    我通过创建一个函数来从 Redis 通道获取消息并将该函数作为异步调用来解决我的问题。如果对其他人有帮助,请让我分享代码。

    这里是函数

    function getMessage(client) {
        return new Promise(function(resolve) {
            client.on('message', function(channel, message) {
                resolve(message);
            });
        });
    }
    

    这里是频道订阅后的调用部分。

    // Subscribe channel
    client.subscribe('my_channel');
    console.log("Subscribed");
    
    // Get feed message from channel
    feedMsg = await getMessage(client);
    console.log("Message received");
    

    谢谢。

    【讨论】:

      猜你喜欢
      • 2013-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-22
      • 2014-05-25
      • 1970-01-01
      相关资源
      最近更新 更多