跳到主要内容

发布需要回复的消息

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

请求消息会携带一个唯一的标识符 ReplyTo 目标主题,该标识符位于其 ReplyTo 消息头字段中。这个 ReplyTo 主题作为回复的返回地址,用于指示回复应发送到何处。

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

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

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

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

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

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

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

  • 对于 Java RTO、C 和 .NET API,目标主题设置为消息属性(请参阅目标)。

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

PubSub+ 消息 API使用方法
Java RTOSessionHandle.sendRequest(...)
CsolClient_session_sendRequest(...)
.NETISession.SendRequest(...)
JavaScript 和 Node.jssolace.Session.sendRequest(...)

如何发送请求消息

相关示例

有关如何发送直接请求消息的示例,请参考 Java RTO、C 和 .NET API 的 RRDirectRequesterRRDirectReplier 示例,以及 JavaScript 和 Node.js API 的 BasicReplierBasicRequestor 示例。

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

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

PubSub+ 消息 API使用方法
Java RTOMessageHandle.setReplyToSuffix(...)
CsolClient_msg_setReplyTo(...)
.NETIMessage.SetReplyToSuffix(...)
JavaScript 和 Node.js不适用

如何添加 ReplyTo 后缀

您也可以设置一个特定的 ReplyTo 目标值(即,队列或主题)。

PubSub+ 消息 API使用方法
Java RTOMessageHandle.setReplyTo(...)
CsolClient_msg_setReplyTo(...)
.NETIMessage.ReplyTo
JavaScript 和 Node.jssolace.Message.setReplyTo(...)

如何设置特定的 ReplyTo 目标