使用面向消息的中间件在单个 Web 应用程序领域内进行通信
using Message oriented middleware for communications within single web application realm
我想检查使用面向消息的中间件 (MOM) 技术(如 JMS 或 ActiveMQ 或 RabbitMQ)在单个 Web 应用程序(即 MOM 服务器的发布者和订阅者)中处理异步处理的设计方法的可行性将包含在同一个 Web 应用程序中。
这种设计背后的基本原理是将一些繁重的处理功能卸载为后台异步操作。在这种情况下,发布者是服务器端实时 Web 服务方法,需要立即(小于 1 秒)响应调用 Web 服务客户端,发布者在 MOM 主题上发出消息。订阅者包含在与发布者相同的 Web 应用程序中,订阅者使用消息异步处理复杂的稍微耗时(5-7 秒)的功能。
通过这种设计,我们可以避免在应用程序服务器容器中生成新线程来处理繁重的复杂处理功能。
在消息发布者和消息订阅者包含在同一 Web 服务器地址 space 的情况下,在这种情况下使用 MOM 服务器是否有点矫枉过正?据我了解,MOM 技术主要用于应用程序间通信,想检查是否可以使用 MOM 进行应用程序内通信。
说出你的想法。
谢谢,
也许您不会认为这是一个很好的例子,但在 JEE 世界中,使用 JMS 进行应用程序内部通信是很常见的。生成新线程被认为是一种糟糕的做法,消息驱动的 bean 使使用消息相对容易,并且您可以获得事务支持。像 GlassFish 这样的兼容应用程序服务器具有 JMS,因此消息的生产和消费不涉及套接字通信,而独立的 ActiveMQ 就是这种情况。但是可能有理由拥有一个独立的 JMS,例如如果有一个消费者集群,并且您希望活动实例从失败的实例接管工作......但是独立的 JMS 服务器成为单点故障,现在您想要一个集群等等。
JMS 的一个重要特性是(可选)消息持久性。你可能会担心 long-运行 任务由于某种原因失败,客户端的请求会丢失。但是持久性消息要昂贵得多,因为它们会导致磁盘 IO。
根据您的描述,我可以看出,对于 MOM 的常用功能(异步处理、保证传送、消息顺序),您只需要异步处理即可。因此,如果保证不重要,我会使用某种线程池。
我想检查使用面向消息的中间件 (MOM) 技术(如 JMS 或 ActiveMQ 或 RabbitMQ)在单个 Web 应用程序(即 MOM 服务器的发布者和订阅者)中处理异步处理的设计方法的可行性将包含在同一个 Web 应用程序中。 这种设计背后的基本原理是将一些繁重的处理功能卸载为后台异步操作。在这种情况下,发布者是服务器端实时 Web 服务方法,需要立即(小于 1 秒)响应调用 Web 服务客户端,发布者在 MOM 主题上发出消息。订阅者包含在与发布者相同的 Web 应用程序中,订阅者使用消息异步处理复杂的稍微耗时(5-7 秒)的功能。 通过这种设计,我们可以避免在应用程序服务器容器中生成新线程来处理繁重的复杂处理功能。
在消息发布者和消息订阅者包含在同一 Web 服务器地址 space 的情况下,在这种情况下使用 MOM 服务器是否有点矫枉过正?据我了解,MOM 技术主要用于应用程序间通信,想检查是否可以使用 MOM 进行应用程序内通信。
说出你的想法。
谢谢,
也许您不会认为这是一个很好的例子,但在 JEE 世界中,使用 JMS 进行应用程序内部通信是很常见的。生成新线程被认为是一种糟糕的做法,消息驱动的 bean 使使用消息相对容易,并且您可以获得事务支持。像 GlassFish 这样的兼容应用程序服务器具有 JMS,因此消息的生产和消费不涉及套接字通信,而独立的 ActiveMQ 就是这种情况。但是可能有理由拥有一个独立的 JMS,例如如果有一个消费者集群,并且您希望活动实例从失败的实例接管工作......但是独立的 JMS 服务器成为单点故障,现在您想要一个集群等等。
JMS 的一个重要特性是(可选)消息持久性。你可能会担心 long-运行 任务由于某种原因失败,客户端的请求会丢失。但是持久性消息要昂贵得多,因为它们会导致磁盘 IO。
根据您的描述,我可以看出,对于 MOM 的常用功能(异步处理、保证传送、消息顺序),您只需要异步处理即可。因此,如果保证不重要,我会使用某种线程池。