使用 ActiveMQ 在应用程序中的模块之间进行消息传递

Posted

技术标签:

【中文标题】使用 ActiveMQ 在应用程序中的模块之间进行消息传递【英文标题】:Using ActiveMQ for messaging between modules in an application 【发布时间】:2014-04-29 12:49:49 【问题描述】:

我正在开发一个应用程序,其中客户端通过 websockets 连接,并且有几个模块通过服务器端的消息传递互连。服务器需要具有可扩展性、高性能,并且可以在以后轻松实现高可用性。我们希望将服务器端逻辑拆分为模块,并且它们只需要通过消息连接。因此,稍后我们可以将模块完全移植到不同的 VM。我们还需要(稍后)持久化模块发送/接收的消息。此外,传入消息的速率可能高于模块可以处理的速率,因此我们需要在模块端进行缓冲(可能是队列)。 ActiveMQ 看起来可以满足我们的目的,但所有地方都将其描述为仅用于分布式应用程序。我们的不是。使用 ActiveMQ 在应用程序中的模块之间进行通信是否过大?欢迎任何建议。

注意:我们在应用程序中使用 Spring boot、Java、Websockets。

【问题讨论】:

【参考方案1】:

在 Java EE Web 应用程序中,利用 JMS 子系统进行应用程序内部通信是很常见的。这使得扩展应用程序变得容易(或为这种可能性做准备..),并且是一种将异步事件排队以进行处理的便捷方式。

您的要求似乎非常相似,这是 ActiveMQ 恕我直言的合法用例。

【讨论】:

我错过了一个关键点,即所述模块将与服务器位于同一台机器上。所以假设使用 ActiveMQ 服务器来中继消息会引入更多的处理时间。所以我们决定使用内存中的 hazelcast 实现来达到同样的目的。 当然可以。附带说明一下,如果您愿意,ActiveMQ 也可以“在内存中”运行。

以上是关于使用 ActiveMQ 在应用程序中的模块之间进行消息传递的主要内容,如果未能解决你的问题,请参考以下文章

ActiveMQ-为什么需要消息中间件?

每日一学|初识ActiveMQ消息中间件:企业信息化

分布式消息通信ActiveMQ

ActiveMQ面试题

JBoss 和 ActiveMQ 之间挂起的 Socket.read() 线程

JMS + ActiveMQ