跳到主要内容

在PubSub+ JCSMP API中确认已发布的消息

当 PubSub+ 事件代理接收到保证消息时,会对其进行确认。下图展示了用于保证消息的发布和确认过程。

确认已发布的保证消息

img

  1. 客户端应用程序通过已建立的客户端会话以持久传递模式发布消息。

客户端应用程序在消息传递 API 必须从事件代理收到确认之前可以发布的消息的最大数量由发布窗口大小会话属性限制(请参阅调整保证消息发布窗口大小)。

  1. 事件代理接收到保证消息后,会向 API 返回确认。这会重新打开发布窗口,以便客户端应用程序可以继续发布保证消息。

默认情况下,当达到发布窗口大小的三分之一或经过一秒钟时,事件代理会发送已发布消息的确认。这些是在事件代理上不可配置的阈值。

如果您的发布者不是高频率的,并且您不想等待确认阈值或超时,您可以通过为每条消息启用立即确认消息属性,以便事件代理为它接收到的每条消息发送单独的确认(请参阅立即确认)。

  1. 当 API 收到窗口消息的确认时,发布窗口会自动重新打开,以便可以发布更多消息。(为了避免在发布消息时出现中断,应在 API 收到确认之前不要达到最大窗口大小。)

会话属性确认事件模式决定了 API 是为每条消息接收确认(默认值)还是为在发布窗口中发送的多条消息接收单个确认(即,范围确认)。请参阅设置消息确认事件模式。

  1. API 通过会话事件向客户端应用程序提供消息确认:
    • 当使用窗口确认事件模式时,在会话事件中,单个确认事件确认最后发送的消息(通过其相关性 ID 引用)并隐式确认所有前面的消息。消息拒绝事件保持明确(即,每条消息)。
    • 当使用每条消息确认事件模式时,在会话事件中,为每条消息提供明确的确认或拒绝消息(通过其相关性键引用)。

已发布保证消息的会话事件:

  • JCSMPStreamingPublishCorrelatingEventHandler.responseReceivedEx(...)
  • JCSMPStreamingPublishCorrelatingEventHandler.handleErrorEx(...)

设置消息确认事件模式

此会话属性指定返回给客户端应用程序的消息确认事件是确认单个已发布的保证消息还是确认一系列已发布的保证消息(对给定消息的确认隐式确认所有前面的消息)。

要为会话设置消息确认事件模式,请使用 JCSMPProperties.ACK_EVENT_MODE