跳到主要内容

确认已发布的消息

已发布的保证消息在被 Solace PubSub+ 事件代理接收时会被确认。下图展示了用于保证消息的发布和确认过程。

确认已发布的保证消息

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

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

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

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

    如果您没有高频率发布者,并且不想等待确认阈值或超时,您可以为每条消息启用“立即确认”消息属性,以便事件代理为接收到的每条消息发送单独的确认。有关更多信息,请参阅立即确认。

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

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

  4. API 通过会话事件向客户端应用程序提供消息确认:

    • 当使用“窗口确认”事件模式时,在会话事件中,单一确认事件确认最后发送的消息(通过其相关性 ID 引用),并隐式确认所有前面的消息。消息拒绝事件保持明确(即,每条消息)。
    • 当使用“每条消息确认”事件模式时,在会话事件中,为每条消息提供明确的确认或拒绝(通过其相关性键引用)。
PubSub+ 消息 API会话事件
Java RTO- SessionEventCode.ACKNOWLEDGEMENT
  • SessionEventCode.REJECTED_MSG_ERROR | | C | - SOLCLIENT_SESSION_EVENT_ACKNOWLEDGEMENT
  • SOLCLIENT_SESSION_EVENT_REJECTED_MSG_ERROR | | .NET | - SessionEvent.Acknowledgement
  • SessionEvent.RejectedMessageError | | JavaScript 和 Node.js | - solace.SessionEventCode.ACKNOWLEDGED_MESSAGE
  • solace.SessionEventCode.REJECTED_MESSAGE_ERROR |

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

设置消息确认事件模式

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

PubSub+ 消息 API属性
Java RTOSessionHandle.PROPERTIES.ACK_EVENT_MODE
CSOLCLIENT_SESSION_PROP_ACK_EVENT_MODE
.NETSessionProperties.AckMode
JavaScript 和 Node.jssolace.sessionProperties.publisherProperties.acknowledgeMode

如何为会话设置消息确认事件模式