跳到主要内容

在PubSub+ JCSMP API中的请求回复消息传递

请求/回复消息传递模式与发布/订阅消息传递模式不同,因为每次订阅者消费消息时,它都会向发布者发送响应。有关详细信息,请参阅在 PubSub+ JCSMP API 中发布请求回复的消息。

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

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

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

发布保证请求消息

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

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

    • 持久或非持久传递模式
    • 唯一的回复到目的地。这是消费客户端必须发送请求消息回复的目的地。此回复到目的地可以是临时的(即,临时主题或队列),也可以是持久的(例如,持久队列或分配给持久队列的主题订阅)。
    • 发布请求消息的主题或队列目的地(参阅目的地)。(注意:在 PubSub+ JCSMP API 中,目的地不是消息属性;相反,它是在调用 send() 方法时传入的。)
    • (可选,但推荐)唯一的相关性 ID。相关性 ID 可以使响应与请求匹配。当使用时,相关性 ID 匹配的实现是应用程序的责任。

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

  1. 添加消息内容。有关详细信息,请参阅在 PubSub+ JCSMP API 中添加数据负载。
  2. 发送请求消息。有关详细信息,请参阅一次发送一条消息。

回复保证请求消息

要作为对收到的保证请求消息的回复发送保证消息,请执行以下步骤:

  1. 接收请求消息。

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

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

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

    • 持久或非持久传递模式
    • 发布回复消息的目的地。这是从请求消息中获取的回复到目的地(主题或队列)。(当使用 JCSMP 时,目的地不是消息属性;相反,它是在调用 send() 方法时传入的。)
    • (可选)与请求消息中的相关性 ID(如果提供)匹配的相关性 ID。

有关设置消息属性的详细信息,请参阅设置消息属性。 4. 添加消息内容。有关详细信息,请参阅在 PubSub+ JCSMP API 中添加数据负载。 5. 发送回复消息。有关详细信息,请参阅一次发送一条消息。

接收回复消息

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

在回复客户端收到请求消息、处理它并返回回复消息后,接收客户端可以通过绑定到回复消息将被入队的已配置端点的流来消费回复消息。(有关详细信息,请参阅在 PubSub+ JCSMP API 中创建流。)

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

请求回复示例

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

发出请求和接收回复的流程

img