跳到主要内容

在PubSub+ JCSMP API中发布请求回复的消息

PubSub+ JCSMP API 允许客户端使用便捷函数和方法发布请求接收客户端回复的直接消息。这与传统的发布/订阅场景不同,在传统的发布/订阅场景中,消息发布到特定主题,对该主题感兴趣的客户端可以接收消息而无需向发布者提供回复。

请求消息在其 ReplyTo 消息头字段中发布一个独特的标识性 ReplyTo 目的地主题。这个 ReplyTo 主题作为回复应该发送到的回执地址。

当客户端连接到事件代理时,会自动为该客户端注册一个点对点(P2P)收件箱订阅,并且默认情况下,这个 P2P 地址用作请求的 ReplyTo 目的地。自动将 P2P 地址设置为 ReplyTo 目的地,允许客户端执行请求/回复操作,而无需担心注册适当的主题订阅以接收回复。

客户端可以通过执行 P2P 会话属性的获取来查询正在使用的 P2P 地址;有关详细信息,请参阅相应的 PubSub+ 消息传递 API 文档。

要发送请求消息,请调用下表中列出的方法之一,并传入以下信息:

  • 要发送的消息内容。
  • 回复超时值。

回复超时值为 0 将创建一个非阻塞请求(即,调用在消息成功缓冲以供传输时立即返回)。对于非阻塞请求,如果从目标客户端收到响应,则该响应将与其他所有接收的消息一起在接收的消息回调中传递。由应用程序负责管理非阻塞响应。

对于非阻塞调用(即,超时值为 0),相关性 ID 匹配是可选的,其实现由应用程序负责。为了将回复映射到请求,回复应用程序应在回复的消息头字段 correlationId 中指定一个标识符。

大于 0 的回复超时值设置 API 等待接收客户端回复的毫秒数。这是一个阻塞请求。在这种情况下,如果在超时过期之前收到响应,则返回回复消息;如果未能及时收到响应,则发出错误信号。默认情况下,当请求为阻塞时,会自动生成相关性 ID。

  • 当使用 JCSMP 时,传入一个主题目的地以发布到。

有关回复请求消息的信息,请参阅回复请求消息。

要发送请求消息,您必须在会话中创建一个 XMLMessageProducer 和一个 XMLMessageConsumer,并启动 XMLMessageConsumer。然后,您可以调用 Session.createRequestor() 来获取一个 Requestor 实例。要发送请求消息,请使用 Requestor.request(...)

相关示例

有关如何发送直接请求消息的示例,请参阅 Solace 开发者中心中的 RRDirectRequesterRRDirectReplier 示例。

设置自定义ReplyTo后缀和目的地

尽管默认情况下会自动生成一个 ReplyTo 目的地值,但应用程序可以选择向会话的默认 ReplyTo 基础主题添加一个特定的 ReplyTo 后缀。如果给定的字符串未以 / 分隔符开头,则会插入一个。

要添加 ReplyTo 后缀,请使用 XMLMessage.setReplyToSuffix(...) 方法。

您也可以设置一个特定的 ReplyTo 目的地值,例如队列或主题。要设置特定的 ReplyTo 目的地,请使用 XMLMessage.setReplyTo(...) 方法。