跳到主要内容

从重放日志中重放消息

本节介绍了客户端应用程序应如何处理由事件代理发起的消息重放,以及客户端应用程序如何完全自主地发起消息重放。

如果您对消息重放不太熟悉,请查看消息重放以获取高级概述,并查看消息重放配置以了解如何在事件代理上配置和使用该功能的详细信息。

此外,还有一个 Solace JCSMP 教程,展示了客户端如何发起和处理重放。

事件代理发起的重放

客户端发起的重放

客户端出于多种原因可以发起消息重放,例如它可以检测到需要从重放日志中重放消息,或者客户端可能存在某种启动条件,要求从特定时间点开始重放消息。

客户端在绑定到队列或主题端点时可以发起消息重放。您可能需要查阅 API 的参考文档,了解如何绑定到队列或主题端点的具体细节。在创建保证消息接收器时(无论是流还是消费者),应用程序可以指定重放起始位置,以指示消息重放的起始点。

支持的不同类型的重放缓冲区起始点包括:

  • 从重放日志的开头开始重放。
  • 从指定的时间戳开始重放所有消息。
  • 从指定的复制组消息 ID 之后开始重放所有消息。
PubSub+ 消息 API使用方法
Java RTOFlowHandle.PROPERTIES.REPLAY_START_LOCATION
CSOLCLIENT_FLOW_PROP_REPLAY_START_LOCATION
.NETFlowProperties.ReplayStartLocationEx
JavaScript 和 Node.jsMessageConsumerProperties.replayStartLocation

如何设置流的重放缓冲区起始位置

请查阅您的 API 的参考文档,了解如何指定这些不同的重放缓冲区起始点。

您需要注意的是,从早于重放日志创建时间的时间戳开始的重放尝试将会失败。

当流成功绑定后,它将从指定的重放缓冲区起始位置开始接收重放日志中的所有消息。

客户端发起重放的限制

  • 不支持非独占端点。
  • 不能从非活动流发起。
  • 不能在浏览器流上发起。
  • 不能使用 JMS API 完成。

如果您的应用程序希望将某个主题的消息重放到队列中

当连接到主题端点时,从重放日志中重放的主题在创建流时设置在流属性中。如果连接到队列,则会重放发布到队列的消息,这些消息匹配在创建流之前队列上已存在的订阅。如果应用程序希望将某个主题的消息重放到队列中,则必须确保在连接流之前为队列添加订阅。

重放失败

如果消息重放失败,事件代理将关闭客户端的流,应用程序将通过流关闭事件收到通知。

PubSub+ 消息 API使用方法
Java RTOSolEnum.FlowEventCode.DOWN_ERROR
CSOLCLIENT_FLOW_EVENT_DOWN_ERROR
.NETFlowEvent.DownError
JavaScript 和 Node.jsMessageConsumerEventName.DOWN_ERROR

流关闭事件

请查看您的 API 文档,了解可能收到的不同子代码。