我现在正在使用REST API将数据保存到数据库中的应用程序上工作。基本流程是:REST API->对象->保存到数据库。考虑到生产者和消费者是上述应用程序的一部分的想法,我想向应用程序介绍队列。
Node.js应用程序是否可以同时充当队列的生产者和使用者?知道Node.js是单线程语言,它是否给我其他选择,而不是创建两个应用程序(一个生成到队列,另一个生成到队列中的应用程序),主动等待队列中的消息并保存到数据库?
此外,这里的要求是应用程序处理重新启动时队列上尚未确认的任何项目。这也使我认为“两个应用程序”体系结构是最好的主意。
谢谢您的帮助。
答案 0 :(得分:0)
是的,nodejs能够做到这一点,并且非常适合每个I / O密集型应用程序使用案例。这里的重点是“您要实现什么”?消息队列的目的是使不同的应用程序一起通信,而如果您需要进程内事件总线,则完全是徒劳的。在同一个nodejs应用程序的解耦组件之间传播消息有许多简便有效的方法。其中一种方法是EventEmitter,让您的组件以pubsub方式进行协作
如果您确信AMQP经纪人是您的解决方案,则只需
有些nodejs库可以简化代码,例如Rascal
答案 1 :(得分:0)
简短答案:是和使用两个单独的连接进行发布和使用
NodeJS应用程序既可以充当队列的生产者又可以充当队列的使用者吗?
我什至会说这是一个很好的用例,与NodeJS原理和线程机制非常匹配。
知道Node.js是单线程语言,它是否给我其他选择,而不是创建两个应用程序(一个生成到队列,另一个生成到队列中的应用程序),积极地等待队列中的消息并保存到数据库?
您可以让一个应用程序同时处理这两个应用程序,只是要注意,如果您的客户端发布得太快而服务器无法处理,RabbitMQ可以对TCP连接施加背压,因此消耗背压TCP连接将极大地影响消费者表现。