订阅恢复策略
订阅恢复策略允许你在订阅主题时回到过去。
例如,想象一下你正在处理价格信息,你使用了一个联合网络,并且网络故障发生,或者有人杀死了你正在通信的代理。如果你重新连接到集群中的另一个代理,你可能会丢失消息。
因此,我们支持一个计时或固定大小的恢复缓冲区,以便如果你在一段时间内重新连接到另一个代理(根据卷和 RAM,这可能是 30 秒到 5 分钟),那么你在停机期间错过的任何消息都会在传递新的消息之前重新传递给你。
有关更多信息,请参见 追溯性消费者
最后图像缓存
在金融市场数据类型的世界中,通常需要知道例如 IBM 股票的最新价格以及获取所有对该价格的未来更新。从历史上看,你通常会使用一个请求-应答快照报价服务来获取最新价格,然后你订阅一个主题以获取更新。问题是客户随后必须处理 2 个 API/中间件,它们通常是截然不同的东西,并且你还有一个排序问题(竞争条件) - 更新可能会胜过最后一个价格请求,因此你可能会得到乱序消息(回到过去的老价格,这可能是非常老的)。
我们的一种订阅恢复策略实现被称为 **Last Image Subscription Policy**,它将确保当你订阅一个主题(例如 PRICES.NASDAQ.IBM)时,你将收到最后图像(发送到该主题的最后一条消息)以及未来发生的任何更新,并进行排序以确保最后图像始终在任何新消息到达之前出现。
在市场数据类型的情况下,一个常见的问题是你可能有一个最后图像价格的缓存,然后是新的价格变化的馈送;如果你从缓存中请求最后的价格并订阅新的价格;根据你的操作方式,你可能会错过更新或在旧的最后图像到达之前收到更新的价格(因此要么得到乱序消息)。
请注意,你可以在不同的目的地或通配符上配置订阅恢复策略以及大多数其他策略。因此,你可能会在主题上的价格上使用最后图像策略,并在不同主题上的其他通知上使用缓冲的固定大小策略,等等。
可用恢复策略摘要
策略名称 | 示例配置 | 描述 |
---|---|---|
FixedSizedSubscriptionRecoveryPolicy | <fixedSizedSubscriptionRecoveryPolicy maximumSize="1024"/> |
在 RAM 中保留固定数量的消息历史记录,这些历史记录按时间顺序逐出。 |
FixedCountSubscriptionRecoveryPolicy | <fixedCountSubscriptionRecoveryPolicy maximumSize="100"/> |
保留固定数量的最后消息。 |
LastImageSubscriptionRecoveryPolicy | <lastImageSubscriptionRecoveryPolicy/> |
只保留最后一条消息。 |
NoSubscriptionRecoveryPolicy | <noSubscriptionRecoveryPolicy/> |
禁用消息恢复。 |
QueryBasedSubscriptionRecoveryPolicy | <queryBasedSubscriptionRecoveryPolicy query="JMSType = 'car' AND color = 'blue'"/> |
执行用户特定的查询机制以加载他们可能错过的任何消息。有关消息选择器的详细信息,请参见 此处 |
TimedSubscriptionRecoveryPolicy | <timedSubscriptionRecoveryPolicy recoverDuration="60000" /> |
在内存中保留一个计时缓冲区,并使用它来恢复新的订阅。恢复时间以毫秒为单位。 |
RetainedMessageSubscriptionRecoveryPolicy | <retainedMessageSubscriptionRecoveryPolicy/> |
保留具有 ctiveMQ.Retain 属性设置为 true 的最后一条消息 |