【问题标题】:using Message oriented middleware for communications within single web application realm使用面向消息的中间件在单个 Web 应用程序领域内进行通信
【发布时间】:2015-08-26 10:06:30
【问题描述】:
我想检查设计方法的可行性,以使用 JMS 或 ActiveMQ 或 RabbitMQ 等面向消息的中间件 (MOM) 技术来处理单个 Web 应用程序中的异步处理,即 MOM 服务器的发布者和订阅者将是包含在同一个 Web 应用程序中。
这种设计背后的基本原理是将一些繁重的处理功能卸载为后台异步操作。在这种情况下,发布者是服务器端实时 Web 服务方法,需要立即(
在这种情况下,如果消息发布者和消息订阅者包含在同一个 Web 服务器地址空间中,那么使用 MOM 服务器是否会过度使用?根据我的阅读,MOM 技术主要用于应用程序间通信,并想检查是否可以使用 MOM 进行应用程序内通信。
说出你的想法。
谢谢,
【问题讨论】:
标签:
asynchronous
publish-subscribe
messagebroker
mom
【解决方案1】:
也许您不会认为这是一个很好的例子,但在 JEE 世界中,使用 JMS 进行应用程序内通信是很常见的。产生新线程被认为是一种不好的做法,消息驱动的 bean 使使用消息相对容易,并且您可以获得事务支持。像 GlassFish 这样的兼容应用程序服务器具有板载 JMS,因此消息的生产和消费不会像独立的 ActiveMQ 那样涉及套接字通信。但是可能有理由拥有一个独立的 JMS,例如如果有一个消费者集群,并且您希望活动实例从失败的实例中接管工作......但是独立的 JMS 服务器成为单点故障,现在您需要它们的集群等等。
JMS 的一个重要特性是(可选的)消息持久性。您可能会担心长时间运行的任务由于某种原因而失败,并且客户端的请求会丢失。但是持久消息的开销要大得多,因为它们会导致磁盘 IO。
根据您的描述,我可以看出 MOM 的常用功能(异步处理、保证交付、消息顺序)您只需要异步处理。因此,如果保证不重要,我会使用某种线程池。