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

标签 java node.js rabbitmq amqp

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

我的问题是:现在用 Node 处理所有传入请求,是否有任何理由继续在jetty内运行java?如果不是,我应该从命令行上的 main 方法运行 java 代码吗?最后,这种方法有什么重大缺陷吗?

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

最佳答案

从使用情况来看,使用Jetty或者Tomcat作为java程序容器并没有什么优势。 Jetty或Tomcat的优点是接收HTTP请求并将其转发给java工作程序。但在您的情况下,请求由 NodeJS 接收并转发到 MQ,java Worker 将主动连接到 MQ 并获取任务并在完成后发送结果。所以这里最好使用独立的Java。当请求变得很多时,很容易启动许多独立的Java程序作为工作集群来处理更多的任务。 NodeJS 和 MQ 可以异步缓存多个请求,而 Java 工作线程可以同步处理它们。例如:1 个 NodeJS 服务器、1 个 MQ 服务器、3 个 Java Worker 服务器。

关于java - 如何使用 RabbitMQ 和 nodejs 运行独立的 java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14328485/

相关文章:

node.js - Jade Include 不渲染包含的页面内容

javascript - fs-path 似乎没有创建正确的文件/文件夹

node.js - 找不到 mongodb 集合/数据

Spring AMQP @RabbitListener 转换为原始对象

php - AMQP - 连接超时

java - 获取两个 Activity 之间的共享偏好

java - 如何在java中查询json对象?

grails - 如何在应用程序启动后启动 RabbitMQ 监听器?

java - 每次我向网格 Pane 添加一行时,它都会显示 IllegalArgumentException

java - 无法使用用于在 FIPS mod 中运行 JSSE 的 Bouncy CaSTLe Fips Provider 连接到 sqlserver