gpt4 book ai didi

java - 用于在两个进程之间共享数据的本地消息队列

转载 作者:行者123 更新时间:2023-12-01 10:19:33 24 4
gpt4 key购买 nike

我有一个服务器应用程序 A,它在请求到达时生成记录。我希望这些记录保存在数据库中。但是,我不想让应用程序 A 线程花时间通过直接与数据库通信来保存记录。因此,我考虑使用一个简单的生产者-消费者架构,其中应用程序 A 线程生成记录,另一个应用程序 B 线程是将记录保存到数据库的消费者。

我正在寻找在应用程序 A 和 B 之间共享这些记录的“最佳”方法。一个重要的要求是应用程序 A 线程始终能够将记录发送到 IPC 系统(例如队列,但这可能是一些其他解决方案)。因此,我认为记录必须始终存储在本地,以便应用程序 A 线程能够在网络故障时发送记录事件。

我想到的最初想法是使用本地消息队列(例如 ActiveMQ)。您认为本地消息队列合适吗?如果是,您是否推荐特定的消息队列实现?请注意,这两个应用程序都是用 Java 编写的。

谢谢,迈克尔

最佳答案

对于这种类型的需求,排队解决方案似乎是最适合的,因为事件的生产者和消费者可以独立工作。有很多解决方案,我个人使用过 RabbitMQ 和 ActiveMQ。两者都同样好。我不想在这里比较它们的性能特征,但 RabbitMQ 是用 Erlang 编写的,Erlang 是一种为构建实时应用程序而定制的语言。

由于您已经使用 Java 平台,ActiveMQ 可能是一个更好的选择,并且能够产生高吞吐量。有了这样的解决方案,消费者不必一直在线。根据事件数据的重要性,您可能还希望拥有持久的队列和消息,以便在消息代理发生故障时,您仍然可以恢复应用程序 A 生成的重要“事件”消息。

如果有许多应用程序产生事件,稍后如果您愿意 scale out (或水平扩展)代理服务,因为它遇到瓶颈,上述两种解决方案都提供集群服务。

最后但并非最不重要的一点是,如果您想在不同平台之间共享这些事件,您可能希望在 AMQP 中共享消息格式,这是一种独立于平台的线路级协议(protocol),用于在异构系统之间共享消息,我不确定这是否是您的要求。 RabbitMQ 和 ActiveMQ 都支持 AMQP。这两种解决方案还支持 MQTT这是一个轻量级消息传递协议(protocol),但您似乎不希望使用 MQTT。

还有其他产品,例如HornetQApache Qpid这也是生产就绪的解决方案,但我个人没有使用过它们。

我认为就可维护性、参与应用程序的松散耦合性质和性能而言,排队解决方案是最好的方法。

关于java - 用于在两个进程之间共享数据的本地消息队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35696601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com