跳到主要内容

请求/回复消息传递

请求/回复消息模式与发布/订阅消息模式不同,因为每次订阅者消费一条消息时,它都会向发布者发送一个响应。有关更多信息,请参阅发布需要回复的消息。

本节概述了使用保证消息实现请求/回复消息模型所需的基本步骤。注意,客户端应用程序必须使用一种机制来关联请求消息和回复消息。使用 CorrelationID 消息属性是一种可能的机制,用于实现这一目标。

  1. 发布保证请求消息
  2. 回复保证请求消息
  3. 接收回复消息
  4. 请求/回复示例

如果您在使用多节点路由(MNR)时进行请求/回复消息传递,则必须使用 PubSub+ 消息 API 的请求/回复方法,以防止与订阅传播相关的潜在竞争条件。

发布保证请求消息

要发送一条需要消费客户端回复的保证消息,请执行以下步骤:

  1. 创建消息并设置以下消息属性:

    • 持久化或非持久化传输模式

    • 唯一的 ReplyTo 目标。这是消费客户端必须发送请求消息回复的目标。ReplyTo 目标可以是临时的(例如,临时主题或队列),也可以是持久的(例如,持久队列或分配给持久队列的主题订阅)。

    • 要发布请求消息的主题或队列目标(参阅目标)。

    • (可选但推荐)唯一的 CorrelationID。相关性 ID 可以使回复与请求匹配。当使用时,相关性 ID 匹配的实现是应用程序的责任。

      有关设置消息属性的信息,请参阅设置消息属性。

  2. 添加消息内容。有关更多信息,请参阅添加数据负载。

  3. 发送请求消息。有关更多信息,请参阅逐条发送消息。

回复保证请求消息

要作为回复发送一条保证消息,请执行以下步骤:

  1. 接收请求消息。

    要接收请求消息,回复客户端必须使用保证消息流绑定到已发布的消息将被入队的目标端点。(有关信息,请参阅创建流。)可以绑定的端点可能是以下之一:

    • 与消息队列目标匹配的队列。
    • 被分配了与消息主题目标匹配的主题订阅的队列。
    • 被分配了与消息主题目标匹配的主题订阅的主题端点。
  2. 从接收到的请求消息中获取以下属性,以便用于形成回复:

    • ReplyTo 目标(参阅 ReplyTo 目标)
    • 如果提供,则获取 CorrelationID(参阅相关性 ID)
  3. 创建回复消息并设置以下消息属性:

    • 持久化或非持久化传输模式

    • 要发布回复消息的目标。这是从请求消息中获取的 ReplyTo 目标(主题或队列)。

    • (可选)与请求消息中的 CorrelationID(如果提供)匹配的 CorrelationID

      有关设置消息属性的信息,请参阅设置消息属性。

  4. 添加消息内容。有关更多信息,请参阅添加数据负载。

  5. 发送回复消息。有关更多信息,请参阅逐条发送消息。

接收回复消息

接收作为请求响应发送的回复消息的过程,本质上与接收其他保证消息的过程相同:

在回复客户端接收请求消息、处理它并返回回复消息后,接收客户端可以通过绑定到回复消息将被入队的目标端点的流来消费回复消息。(有关信息,请参阅创建流。)

虽然不是强制要求,但接收客户端可以是最初发送请求的客户端。

请求/回复示例

需要注意的是,在此示例中,首先将主题订阅添加到已配置的持久端点中,以便回复客户端可以接收请求,请求客户端可以接收相应的响应。

发出请求和接收回复的流程如下图所示:

请求/回复保证消息