我有一个nodejs项目,它为外部Web应用程序公开了一个简单的rest api。此webhook必须每秒处理大量请求,并且非常快速地向调用者返回200 OK。为了实现这一点,我调查了一个redis简单队列,以便将每个请求排入队列,以便稍后异步处理(通过消费者线程)。
redis简单队列似乎是实现此任务的简单方法(https://github.com/smrchy/rsmq)
1)rsmq.receiveMessage(){.......}是一种阻塞方法吗?如果这个处理程序很慢 - 它会影响我服务器的性能吗?
2)如果对问题1的回答是正确的 - 是否建议将消息的消费提取到外部微服务? (专门的消费者)?在这样的环境中创建多线程消费者的最佳实践是什么?
答案 0 :(得分:0)
答案 1 :(得分:0)
1)不,它不会阻止事件循环,但是一旦你调用" next"你就会开始处理第二条消息。方法,即您将一次处理一条消息。为了解决这个问题,您可以并行启动多个工作人员。看看这里:https://stackoverflow.com/a/45984677/7201847
2)这是一个架构决策,取决于您必须支持的负载和您拥有的硬件容量。我建议至少有两个Node.js进程,一个用于将消息添加到队列中,另一个用于实际处理它们,如果需要,可以选择启动其他工作进程,具体取决于性能测试的结果。