消息队列、EventBus和发布/订阅之间的区别是什么?

The difference between a Message Queue, EventBus and a Pub/Sub?(消息队列、EventBus和发布/订阅之间的区别是什么?)

本文介绍了消息队列、EventBus和发布/订阅之间的区别是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我混淆了消息队列的概念(例如ActiveMQ、RabbitMQ、ZeroMQ)和EventBus(例如Guava Event Bus、Akka EventBus)

我认为MQ和eventBus都使用发布/订阅模式。与芭乐相比,MQ似乎更强大、更笨重。

但真正的区别是什么呢?EventBus是否与MQ相同?

推荐答案

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

事件通常用于应用程序间通信。例如,在线程之间通信或对GUI应用程序中的用户输入做出反应(考虑Swing事件、Guava等)。

A队列是消息的1对1目的地。消息仅由其中一个使用接收方接收(请注意:一致使用‘主题客户端’的订阅方和队列客户端的接收方可以避免念力)。发送到队列的消息将存储在磁盘或内存中,直到有人将其接收或过期。

A总线是一对多分发模型。此模型中的目的地通常称为主题或主题。相同的发布消息由所有消费订户接收。你也可以称之为"广播"模式。您可以将主题等同于分布式计算的观察者设计模式中的主题。一些消息总线提供程序有效地选择将其实现为UDP而不是TCP。对于主题,信息传递是"即发即忘"--如果没有人听,信息就会消失。如果这不是您想要的,您可以使用"持久订阅"。

如果您将所有这些放在一起,您将拥有这些:

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

  2. 事件队列:基于队列的编程框架。您可以使用任何实现Java Queue接口的类来实现这一点。例如BlockingQueue

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

  4. 事件总线:基于发布/订阅的编程框架。芭乐事件总线,观察者设计模式

这篇关于消息队列、EventBus和发布/订阅之间的区别是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:消息队列、EventBus和发布/订阅之间的区别是什么?

基础教程推荐