当前位置: 首页 > 知识库问答 >
问题:

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

曹骞仕
2023-03-14

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

创建持久主题< br >消息1发送到持久主题< br >消息2发送到持久主题< br >客户端A订阅持久主题< br >消息3发送到持久主题< br >消息4发送到持久主题< br >客户端A脱机< br >消息5发送到持久主题< br >消息6发送到持久主题< br >客户端A联机

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

提前感谢!

共有1个答案

吴单鹗
2023-03-14

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

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

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

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

您可以根据时间,计数,内存大小或类似内容进行恢复。请参阅此处的选项和设置。

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

 类似资料:
  • 我需要为ActiveMQ创建一个主题和一个持久订阅者,我的问题是我不知道在哪里指定它。我可以创建主题并使用消息,但是当我关闭订阅者然后继续发送消息并再次打开订阅者时,它不会读取它们。 这是我目前掌握的情况: 发送消息: 接收消息: 我已经阅读了这篇文章,我明白我需要创建持久订阅者。 我也读过spring文档 我认为它与(我没有实现,我使用的是默认配置)有关,文档显示: 但是我似乎找不到在哪里创建持

  • “ActiveMQ中Blob消息传递的持久性”? "我们不能使用数据库(KahaDB)来Blob消息URL吗?" “我们可以像在远程activemq服务器中一样在嵌入式代理中创建文件服务器吗?”

  • 我有疑问一条消息是否会在主题中持续存在,我从这篇文章中得到了大部分答案。 但是这种情况如何呢?假设代理重新开始,一些发布者已经开始向一个主题发送消息,现在将来一些持久订户将与该主题连接,但是当前没有持久订户,因此在代理重新开始的情况下,发布者到目前为止向该主题发送的所有消息都将丢失。 我尝试了上述情况,确实所有的信息都丢失了。此外,我尝试了这种情况——我有一个活跃的持久订阅者,它能够将消息推送到主

  • 我想配置一个持久主题,但我想配置Apache ActiveMQ Artemis将为该主题的非活动持久订阅服务器保留消息的时间。 例如,类似“为非活动的持久订阅服务器保存持久消息长达30秒”的内容。如果订阅服务器在30秒内没有变为活动状态,则当订阅服务器变为活动状态时,消息将不再可用。

  • 我有一个Red Hat AMQ(基于ActiveMQ Artemis)代理,我希望使用持久订阅(或等效)特性,这样我将有多个OpenWire JMS订阅者订阅我们的应用程序的事件,这些事件将可靠地交付给他们。 我想预先配置订户,这样就可以省去我在初始应用程序启动时的麻烦。我希望避免初始应用程序启动的情况,即在持久订阅服务器执行初始订阅之前,主应用程序开始运行并发布事件。 有什么方法可以预先配置持久

  • 我们开发的NMS产品已经被几家电信运营商部署。我们的应用程序(使用ActiveMQ)将向故障队列发布故障通知,消息被设置为持久性。这些消息由第三方JMS客户机使用。并不是所有的客户都有通知客户端来使用事件(有些部署没有任何订阅)。问题是,如果队列从来没有订阅服务器连接到队列,ActiveMQ是否会持久化消息?。