java - ActiveMQ 持久主题、消息预订阅?

标签 java activemq jms-topic

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

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

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

提前致谢!

最佳答案

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

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

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

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

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

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

关于java - ActiveMQ 持久主题、消息预订阅?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29565899/

相关文章:

java - "Toolkit.getDefaultToolkit().sync()"是什么意思?

java - 如何执行多个操作并单击带有文本的链接作为成员(member)登录,网址为 http ://www. SPICEJET.com/through selenium-webdriver

java - 监控嵌入式 ActiveMQ

tcp - 我们可以配置ActiveMQ服务器的TCP级别负载平衡吗?

java - 将 JMS TopicSession 转换为 AQjmsSession 时遇到问题

java - 如何不寻找关键帧

java - 获取声明枚举的类

java - 我将如何向 Activemq 发送消息

java - JMS 多个持久订阅一个主题

java - 如何使用 Spring JMS 创建共享订阅