在为这种情况选择邮件代理(RaabitMQ,Redis等)或其他合适的工具时,我需要一些帮助。
我正在升级游戏服务器。它是由Node.js编写的。它由多个过程组成,即GameRoom,Lobby,Chat等。当用户发出请求时,消息将被路由到相关过程进行处理。我通过按我的代码进行路由来做到这一点,并且每个进程都通过node-ipc相互通信。然而,这不是太有效并且不能扩展。另外,某些进程的工作量非常大(与大厅相关的请求很多),我们创建了多个大厅进程,并将消息随机路由到不同的大厅进程。我认为消息代理可以在这种情况下提供帮助,而且我甚至可以通过将不同的进程放入不同的物理服务器来扩大规模。我想知道哪个消息代理适合于此?发件人是否可以将消息发送到多个消费者争用一条消息且只有一个消费者使用该消息并将其回复给发件人的队列?谢谢。
答案 0 :(得分:1)
我将无法从经验上谈谈Kafka,而是任何消息队列解决方案,RabbitMQ和ActiveMQ都会满足您的需求。
我假设您正在计划这样的流程:
REST_API -> queue -> Workers ----> data persistance <--------+
| |
+------> NotificationManager ----> user
NotificationManager可以是一项服务,通过Websockets或任何其他异步通信方法让用户知道。
某些解决方案将更好地结合在一起,并减轻您的负担。解决方案不仅是消息队列,而且还是任务队列,都将具有从工作人员那里获得响应的方法。
Machinery这个最近引起我注意的项目在使用MongoDB和RabbitMQ本身的同时完成了所有这些工作。