跳到主要内容

什么是消息

在技术术语中,消息允许计算机系统间共享信息而无需直接连接或了解彼此的位置。消息传递类似于快递服务,就像您将资料或包裹交给快递员并信任他们将其送达您希望的地方一样,消息也是如此——您的应用程序将信息交给消息系统,该系统将其路由到需要到达的其他应用程序。

在最基本的层面上,消息传递涉及以下参与者:

  • 发布者——发送或发布消息的实体(也称为生产者)
  • 消息——发布者想要发送的信息。消息通常包含事件数据,但也可以携带查询、命令和其他信息。
  • 消息系统——传输消息的基础设施
  • 订阅者——消息的最终接收者(也称为消费者)

在事件驱动架构(EDA)中,消息通常具有一个目的地,将发布者与订阅者分开。在PubSub+平台中,目的地通常是主题端点或队列,主题端点和队列由事件代理管理。

以下图示展示了事件消息通过主题端点传播到多个订阅者的过程。

img

消息类型

PubSub+平台支持三种类型的消息:

  • 事件消息描述应用程序需要告知其他应用程序的某些事情。事件流是一系列随着事件发生而发布的事件消息。资本市场中的定价流和交易流就是事件流的例子。事件及其描述消息之间的关系如此紧密,以至于我们在本文件中经常将事件和消息这两个术语互换使用。
  • 查询是一条检索信息的消息(例如,使用HTTP GET和HEAD方法)。查询需要响应。
  • 命令指示另一个应用程序执行某个操作或改变状态(例如,使用HTTP POST、PUT和DELETE方法)。命令与查询一样,也需要响应。

消息结构

一条消息有三个部分:消息头、属性和消息体,如下图所示:

img

消息头是事件代理用于在系统中路由消息的部分。一些消息头字段,如目的地和传递模式,是必需的,而其他字段则是可选的。例如,Reply-to-Topic仅在请求-响应消息中需要,其中响应者需要知道将其响应发送到哪里。

属性

除了消息头字段外,应用程序特定的属性也可以作为消息的一部分包含。这些应用程序指定的属性不会被事件代理修改,可以用于促进应用程序之间的通信。一些API定义了自己的标准属性。例如,JMS定义了如JMSXUserID和JMSXAppID等属性,可用于识别发送消息的用户或应用程序。除了API定义的标准属性外,应用程序还可以指定属性。一个应用程序指定的属性示例是订单管理系统中的订单ID,用作跟踪与特定购买相关的所有消息的唯一标识符。

消息体

消息体通常称为有效载荷或附件。它包含以应用程序指定格式的数据,并由事件代理未修改地传输。主体由原始二进制数据或结构化数据(如文本、流或映射)组成。无论如何,生产者和消费者必须就有效载荷格式达成一致,以便正确解释数据。事件消息使用模式来定义有效载荷格式。


想了解更多关于消息的信息吗?继续阅读消息交换模式

或者跳到下一部分,了解什么是事件代理