gpt4 book ai didi

java - Message Queue、EventBus 和 Pub/Sub 之间的区别?

转载 作者:搜寻专家 更新时间:2023-11-01 03:51:54 24 4
gpt4 key购买 nike

我对消息队列(例如 ActiveMQ、RabbitMQ、ZeroMQ)和 EventBus(例如 Guava Event BusAkka EventBus)的概念感到困惑

我认为 MQ 和 eventBus 都使用 pub/sub 模式。与 Guava 相比,MQ 似乎更强大、更笨重。

但真正的区别是什么? EventBus和MQ一样吗?

最佳答案

消息 通常用于进程间通信和在机器之间发送消息。您可以将事件封装在消息中(例如作为 XML 或 JSON)并使用消息传输此事件。 TIBCO RV、JMS、IBM 或 Hornet MQ,...

事件 通常用于应用程序间通信。例如,在线程之间进行通信或对 GUI 应用程序中的用户输入使用react(想想 Swing 事件、Guava 等)。

队列 是一对一的消息目的地。该消息仅由一个消费接收者接收(请注意:始终使用“主题客户端”的订阅者和队列客户端的接收者避免混淆)。发送到队列的消息存储在磁盘或内存中,直到有人拿起它或它过期。

总线是一种一对多的分布模型。此模型中的目的地通常称为主题或主题。所有消费订阅者都会收到相同的已发布消息。您也可以将此称为“广播”模型。您可以将主题视为分布式计算的观察者设计模式中的主题。一些消息总线提供商有效地选择将其实现为 UDP 而不是 TCP。对于主题,消息传递是“即发即弃”——如果没有人收听,消息就会消失。如果这不是您想要的,您可以使用“持久订阅”。

如果你把这些放在一起,你会得到这些:

  1. 消息队列:基于队列的消息中间件是 IBM MQ、JMS/ActiveMQ 队列、Hornet MQ

  2. 事件队列:基于队列的编程框架。您可以使用任何实现 Java Queue 接口(interface)的类来实现它。例如阻塞队列

  3. 消息总线:发布/订阅消息中间件,例如JMS/ActiveMQ 主题,TIBCO RV。消息通过 TCP 或 UDP 发送到另一个进程。有关详细信息,请参阅 JMS Topic vs Queues

  4. 事件总线:一种基于发布/订阅的编程框架。 Guava EventBus、观察者设计模式

关于java - Message Queue、EventBus 和 Pub/Sub 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24340892/

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