0

我有一个nodejs项目为外部web应用程序公开了一个简单的rest api。这个webhook必须每秒处理大量的请求,并且很快地向调用者返回200 OK。为了实现这个目的,我调查了一个redis简单队列,以便在每个请求被排队后被异步处理(通过消费者线程)。带有Redis消息队列的NodeJS - 如何设置多个使用者(线程)

Redis的简单的队列似乎是一个简单的方法来实现这个任务(https://github.com/smrchy/rsmq

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

2)如果问题1的答案为真 - 是否建议将消息​​的消耗提取到外部微服务? (一个专门的消费者)?在此类环境中创建多线程消费者的最佳实践是什么?

+0

这是涉及到https://stackoverflow.com/questions/34422094/multple-node-js-message-recievers-for-a-redis-queue –

回答

0

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

提供发布 - 订阅功能,您可以发布到各种渠道的用户没有任何知识。订户可以订阅他们希望的频道。

sreeni

+0

是的,但我在问关于nodejs作为一个能力消费者(在节点中创建多个监听器是否是一种好的做法?或者我应该在项目之外提取消费者?) – Urbanleg

0

1)否,它将不会阻碍事件循环,但是你只会开始处理的第二消息,一旦你调用“下一个”的方法,即,就会在一次处理一个消息。为了克服这个问题,你可以同时启动多个工作人员。看看这里:https://stackoverflow.com/a/45984677/7201847

2)这是一个架构决定,取决于您必须支持的负载和硬件容量。我会推荐至少两个Node.js进程,一个用于将消息添加到队列中,另一个用于实际处理它们,根据性能测试的结果,还可以根据需要启动其他辅助进程。