如何使用RabbitMQ和nodejs运行独立java

如何使用RabbitMQ和nodejs运行独立java,java,node.js,rabbitmq,amqp,Java,Node.js,Rabbitmq,Amqp,我一直在致力于将node.js放在java Web服务器的前面,以利用node的异步处理——完成一些轻处理和其他任务,最终实现socket.io。应用程序的大部分实际工作都是用java完成的,到目前为止,我们一直在使用jetty Web服务器来处理所有请求。我最初考虑使用节点http代理来转发(可能是修改过的请求)。经过进一步考虑,我意识到,我可以使用RabbitMQ和节点amqp库之类的东西来实现更健壮的通信协议,而不是转发http请求。这还可以更好地支持从java通过node和socket.

我一直在致力于将node.js放在java Web服务器的前面,以利用node的异步处理——完成一些轻处理和其他任务,最终实现socket.io。应用程序的大部分实际工作都是用java完成的,到目前为止,我们一直在使用jetty Web服务器来处理所有请求。我最初考虑使用节点http代理来转发(可能是修改过的请求)。经过进一步考虑,我意识到,我可以使用RabbitMQ和节点amqp库之类的东西来实现更健壮的通信协议,而不是转发http请求。这还可以更好地支持从java通过node和socket.io推回浏览器

我的问题是:既然使用node处理所有传入的请求,有什么理由让java继续在jetty中运行吗?如果不是,我应该直接从命令行上的主方法运行java代码吗?最后,这种方法是否存在任何重大缺陷


我们的应用程序是一个单页应用程序,除了最初加载页面的第一个请求之外,所有进一步的调用都只是restful json调用,应该很容易通过amqp进行传输。

根据用法,使用Jetty或Tomcat作为java程序容器没有任何优势。Jetty或Tomcat具有接收HTTP请求并将其转发给worker java程序的优势。但是在您的情况下,请求由NodeJS接收并转发到MQ,java工作者将主动连接到MQ,并在完成任务后获得任务并发送结果。因此,最好在这里使用独立Java。而且,当请求变多时,工人集群可以轻松启动许多独立的Java程序来处理更多的任务。NodeJS和MQ可以异步缓存多个请求,Java工作人员可以处理这些请求。例如:1个NodeJS服务器、1个MQ服务器、3个Java工作服务器。

为什么不能在Java中使用多个线程?您希望从添加message broker的所有额外复杂性和另一种语言的代码中获得什么?在不深入了解原因的情况下,我们希望获得的大部分好处是异步处理请求,特别是便宜地保留请求(socket.io/throttling)。我们探索了jetty continuations,但是java代码非常依赖于线程。就目前而言,这似乎更干净,尽管复杂。我们还计划在其他领域利用AMQP。由于我习惯于使用容器(除非我正在编写一个小型实用程序,或者只是在本地运行),那么设置这些java Worker使其健壮的最佳方法是什么,在不完全崩溃的情况下处理错误等。显然,我可以在顶层尝试捕获任何内容并将其转储到日志,但似乎应该有更好的方法。