ActiveMQ持久主题,消息预订阅?

ActiveMQ durable topics, messages pre-subscription?

在我们的业务需求中,我们需要将更新传输到分布在全国各地的数千个客户端。事实是,这些客户端中有许多使用 3g 网络连接到我们,因此,发生了许多 connect/disconnect...我们需要提供的更新是 "Enterprise A can not be cashed anymore" 或 "Enterprise B is able to be cashed again" 之类的东西 我们正在考虑使用 ActiveMQ 持久主题来传递这些更新。据我了解,一旦客户端连接到持久主题,即使他失去连接,只要他回来,他就会在离线时收到发送到该主题的消息。 一个大问题是,如果客户端启动了我们的系统,但是在他订阅之前,消息被发送到他订阅的持久主题怎么办。本例为:

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

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

提前致谢!

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

如果您打算向新客户提交整个消息历史记录,我建议采用一些 "initial load" 程序,让客户询问历史记录。也许使用 JMS 请求回复或其他一些功能。

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

那你需要在broker端指定恢复策略。

您可以根据时间、计数、内存大小等进行恢复。查看选项和设置 here

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