在我们的业务需求中,我们需要将更新传输到遍布全国的数千个客户端。事实上,许多客户使用3g网络连接到我们,因此,发生了许多连接/断开...我们需要提供的更新类似于"企业A不能再兑现"或者& #34;企业B可以再次兑现", 我们正在考虑使用ActiveMQ持久主题来提供这些更新。我的理解是,一旦客户端连接到一个持久的主题,即使他失去连接,每当他回来时,他都会收到在他离线时发送给该主题的消息。 很大的问题是,如果客户启动我们的系统会发生什么,但是在订阅之前,消息被发送到他怀疑的持久主题。这种情况是:
创建持久主题
消息1被发送到持久主题
消息2被发送到持久主题
客户A订阅持久主题
消息3被发送到持久主题
消息4被发送到持久主题
客户A离线了
消息5被发送到持久主题
消息6被发送到持久主题
客户A上线
根据ActiveMQ论文,客户A将收到消息3到6,没有任何问题。但是消息1和2呢?我们承担不起这些消息......
提前致谢!
答案 0 :(得分:1)
"消息1-2"能得到的。考虑在多年的消息通过后添加客户端订阅者。是否应该交付所有这些?
如果您打算将新邮件的完整历史记录提交给新客户,我建议一些"初始加载"客户询问历史的程序。也许使用JMS请求回复或其他一些功能。
无论如何,如果您希望您的客户能够在创建之前收到某些消息,您可以使用retroactive consumer。
然后,您需要在代理端指定恢复策略。
您可以根据时间,计数,内存大小或类似情况进行恢复。请参阅选项和设置here。
使用目的地名称,例如:
UPDATE.TOPIC?consumer.retroactive=true
在客户端启用此功能。