开发者社区 > 云原生 > 云消息队列 > 正文

nodejs这个除了使用setInterval类似的方法持续消费消息RocketMQ还有其它方法吗?

nodejs这个除了使用setInterval类似的方法持续消费消息RocketMQ还有其它方法吗?
```async function main() {
const simpleConsumer = new SimpleConsumer({
consumerGroup: 'nodejs-demo-group',
endpoints: '127.0.0.1:8081',
subscriptions: new Map().set('TopicTest', 'nodejs-demo'),
});
await simpleConsumer.startup();

const messages = await simpleConsumer.receive(20);
console.log('got %d messages', messages.length);
for (const message of messages) {
console.log(message);
console.log('body=%o', message.body.toString());
await simpleConsumer.ack(message);
}
await simpleConsumer.shutdown();
}

main();
```

展开
收起
你鞋带开了~ 2024-03-06 08:11:44 34 0
1 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    除了使用setInterval类似的方法持续消费消息RocketMQ,还可以使用事件驱动的方式。在Node.js中,可以使用EventEmitter类来实现事件驱动的消费者。以下是一个简单的示例:

    const EventEmitter = require('events');
    
    class SimpleConsumer extends EventEmitter {
      constructor(options) {
        super();
        this.consumerGroup = options.consumerGroup;
        this.endpoints = options.endpoints;
        this.subscriptions = options.subscriptions;
      }
    
      async startup() {
        // 启动消费者的代码
      }
    
      async receive(maxMessages) {
        // 接收消息的代码
      }
    
      async ack(message) {
        // 确认消息的代码
      }
    
      async shutdown() {
        // 关闭消费者的代码
      }
    }
    
    async function main() {
      const simpleConsumer = new SimpleConsumer({
        consumerGroup: 'nodejs-demo-group',
        endpoints: '127.0.0.1:8081',
        subscriptions: new Map().set('TopicTest', 'nodejs-demo'),
      });
    
      simpleConsumer.on('message', async (message) => {
        console.log('got message');
        console.log('body=%o', message.body.toString());
        await simpleConsumer.ack(message);
      });
    
      await simpleConsumer.startup();
      // 在这里添加一个循环,以便持续监听事件
      while (true) {
        // 等待事件触发
        await new Promise((resolve) => setTimeout(resolve, 1000));
      }
    }
    
    main();
    

    在这个示例中,我们创建了一个SimpleConsumer类,它继承自EventEmitter类。我们在SimpleConsumer类中定义了startup、receive、ack和shutdown方法,并在main函数中实例化了这个类。然后,我们使用simpleConsumer.on('message', callback)来监听消息事件,并在回调函数中处理消息。最后,我们使用一个无限循环来持续监听事件。

    2024-03-06 13:47:49
    赞同 展开评论 打赏

涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/

热门讨论

热门文章

相关电子书

更多
探究 Node.js 的服务端之路 立即下载
个推微服务实践 基于OpenResty 和Node.js 立即下载
沪江基于Node.js大规模应用实践 立即下载