【问题标题】:ActiveMQ durable topics, messages pre-subscription?ActiveMQ 持久主题、消息预订阅?
【发布时间】:2015-06-16 10:28:13
【问题描述】:

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

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

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

提前致谢!

【问题讨论】:

    标签: java activemq jms-topic


    【解决方案1】:

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

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

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

    那么你需要在代理端指定一个恢复策略。

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

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

    【讨论】:

    • 感谢您的回答。我们确实有一个“初始负载”,并且更新不会持续很长时间,最多一周。
    猜你喜欢
    • 2015-08-24
    • 2015-08-11
    • 2016-01-14
    • 2017-01-24
    • 2013-11-10
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    相关资源
    最近更新 更多