1

在我们的业务需求中,我们需要将更新传输给分布在全国各地的数千个客户。问题是,这些客户端中的许多使用 3g 网络连接到我们,因此,发生了许多连接/断开连接......我们需要提供的更新是“企业 A 不能再兑现”或“企业 B 能够再次兑现”,我们正在考虑使用 ActiveMQ 持久主题来提供这些更新。据我了解,一旦客户端连接到一个持久主题,即使他失去连接,每当他回来时,他都会在离线时收到发送到该主题的消息。最大的问题是,如果客户启动我们的系统,但消息被发送到他订阅的持久主题,在他的订阅之前。这个案例是:

创建持久主题
消息 1 被发送到持久主题
消息 2 被发送到持久主题
客户端 A 订阅持久主题
消息 3 被发送到持久主题
消息 4 被发送到持久主题
客户端 A 下线
消息 5 被发送到持久主题
消息 6 被发送到持久主题
客户端 A 上线

根据 ActiveMQ 论文,客户端 A 将毫无问题地接收消息 3 到 6。但是消息 1 和 2 呢?我们不能放弃这些信息......

提前致谢!

4

1 回答 1

1

“消息 1-2”应该可用多长时间。考虑在多年的消息过去后添加一个客户端订阅者。所有这些都应该交付吗?

如果您打算将整个消息历史记录提交给新客户端,我建议您执行一些“初始加载”过程,让客户端请求历史记录。也许使用 JMS 请求回复或其他一些功能。

无论如何,如果您希望您的客户端能够在创建之前获得一些消息,您可以使用追溯消费者

然后您需要在代理端指定恢复策略。

您可以根据时间、计数、内存大小或类似因素进行恢复。在此处查看选项和设置。

使用目标名称,例如: UPDATE.TOPIC?consumer.retroactive=true 在客户端启用此功能。

于 2015-04-12T09:02:47.103 回答