消息队列与消息代理有什么区别?


在这篇文章中,我们将解释消息队列与消息代理之间的区别,它们的使用情况,以及我们是否可以把它们一起作为软件应用程序之间的通信手段。

什么是消息队列?
队列是一种数据结构,先进入队列的信息也先被传送。这个编程概念也被称为FIFO,即先入先出。

想象一下,你有一个管道,你拿着管道的一端。你的朋友拿着另一端。你开始在管子上添加小石头。你添加的第一块石头将是第一块石头,它到达管子的另一端,落入你朋友的手中。一个相当简单的概念,不是吗?消息队列的工作方式与此完全相同,只是使用了消息而不是石头。

消息是信息的位数,我们要传输这些信息。服务可以有消息队列,它包含一个按顺序排序的调用数组,被发送到所需的目的地。队列中的信息被储存起来,直到它被正确的服务接收。生产者是应用程序,它们创建信息并将其推送到队列中。
另一方面,通过队列查看并接收这些信息的应用程序被称为消费者。消息队列的使用也使不同服务之间的异步通信成为可能。当发送信息时,生产者可以不间断地继续工作,允许消费者应用程序以自己的速度处理信息。

什么是消息代理?
为了回答这个问题,消息代理只是一种软件,它为不同的应用程序之间提供稳定和可靠的通信手段。但是,如果这些应用程序和服务使用不同的语言,并且不使用相同的技术栈,那该怎么办?不用担心,因为翻译消息协议之间的信息是消息代理工作的一部分。消息代理还负责什么?好吧,消息代理存储、路由,并将信息传递到所需的目的地。一般来说,它们的目的是允许应用程序进行内部通信,从而扮演通信层的角色。发送者可以发布信息,即使不知道这些信息的接收者是谁,有多少人,甚至不知道这些接收者此刻是否在活动。

不同的消息传递方式
现在我们知道了什么是消息代理,让我们来看看不同的消息传递风格,更具体地说就是点对点消息传递和发布-订阅消息传递。

点对点消息传递以这样一种方式使用消息队列,即消息的发送者和接收者有一对一的关系。当需要保证每个消息只被发送和消费一次时,就会使用这种类型的消息传递方式。例如,这是在处理金融交易时使用的首选风格。

发布-订阅的消息传递风格使消息的生产者能够将其发送到一个主题。消费者订阅这些主题并接收生产者发送的信息。因此,可以说,发送者和接收者之间的关系是一对多的。当一个消息被发布到一个主题时,它将到达所有订阅了这个主题的应用程序。

那么,什么时候使用这种消息传递方式是合适的呢?
例如,如果一个卡车司机要对路上的情况进行更新,更确切地说,是不同边界之间的延迟,那么等待处理卡车货物的人就会被告知这种延迟,并可以在等待时继续工作。
此外,如果这些更新是在一个为司机之间的沟通而设计的系统中进行的,其他卡车司机就会知道并根据新出现的情况来计划他们的行程。

消息队列与消息代理区别
消息队列负责通过使用队列数据结构发送、接收和存储消息来实现应用程序之间的通信。即使我们使用消息队列进行数据传输,它们也不知道它们所携带的信息的内容。从本质上讲,消息代理只是一种机制,它扩展了消息队列的用法。与消息队列不同,消息中介知道通过它们传输的信息的内容。另外,消息代理可以处理来自各种来源的信息。例如,从文件或HTTP请求中读取的信息。

简而言之,消息代理负责。

  • 数据传输协议之间的转换
  • 服务之间的信息格式转换
  • 服务之间通信的路由
  • 来自不同来源的事件的分配

事实证明,消息代理使用消息队列在所有相关方之间传输信息。简单地说,消息队列是一个存储所产生的数据直到其消费的结构,而消息代理是一个管理消息队列的软件组件。