NodeJS与Redis消息队列 - 如何设置多个消费者(线程)

时间:2017-06-15 08:24:50

标签: node.js multithreading redis message-queue publish-subscribe

我有一个nodejs项目,它为外部Web应用程序公开了一个简单的rest api。此webhook必须每秒处理大量请求,并且非常快速地向调用者返回200 OK。为了实现这一点,我调查了一个redis简单队列,以便将每个请求排入队列,以便稍后异步处理(通过消费者线程)。

redis简单队列似乎是实现此任务的简单方法(https://github.com/smrchy/rsmq

1)rsmq.receiveMessage(){.......}是一种阻塞方法吗?如果这个处理程序很慢 - 它会影响我服务器的性能吗?

2)如果对问题1的回答是正确的 - 是否建议将消息​​的消费提取到外部微服务? (专门的消费者)?在这样的环境中创建多线程消费者的最佳实践是什么?

2 个答案:

答案 0 :(得分:0)

您可以使用redis https://redis.io/topics/pubsub

提供的pubsub功能

您可以在不了解订阅者的情况下发布到各种频道。订阅者可以订阅他们想要的频道。

sreeni

答案 1 :(得分:0)

1)不,它不会阻止事件循环,但是一旦你调用" next"你就会开始处理第二条消息。方法,即您将一次处理一条消息。为了解决这个问题,您可以并行启动多个工作人员。看看这里:https://stackoverflow.com/a/45984677/7201847

2)这是一个架构决策,取决于您必须支持的负载和您拥有的硬件容量。我建议至少有两个Node.js进程,一个用于将消息添加到队列中,另一个用于实际处理它们,如果需要,可以选择启动其他工作进程,具体取决于性能测试的结果。