2014-01-22 59 views
1

我将发布到一个单一的Activemq主题,我会有很多用户从这个Activemq消费。我的一些订阅者可能会在晚些时候连接,但是当他们这样做时,我希望他们接收发布到该Activemq主题的所有消息。我该如何做到这一点,这是什么pubub的子类型调用,你可以得到一个完整的图片在第一次订阅?骆驼Activemq主题延迟订户

+0

我不知道这是可能的。在ActiveMQ中使用主题时,必须告诉它主机是谁提前,以便知道需要多长时间才能挂上消息。在你的情况下,你希望它们永远被挂起,这就失去了ActiveMQ的部分目的。这是一个消息队列,而不是数据库。消息意味着被处置。 – bstempi

+0

我想我找到了一些东西。追溯是关键字。目前正在测试,如果它是我正在寻找。这应该是可行的,因为Activemq内置了一个数据库(kahadb)。 – Thirlan

+0

基本上你正在做的是让你的数据库增长无限。迟早的表现将会非常糟糕。 Activemq旨在仅在短时间内存储消息。 –

回答

1

创建单独的初始加载服务通常要好很多。新客户连接并希望多年错过更新可触发源应用程序的某些同步,并通过其他一些渠道(例如队列)接收这些消息。一旦同步,您只需在您的主题上使用耐用用户,以确保您不会错过任何更新。

ActiveMQ并非真正用于长期存储大量数据的中间数据库。 Kahadb不像常规数据库(尽管如果您愿意,可以使用JDBC数据源来备份它)。在MOM软件中长期存储消息实际上是一种反模式。

+1

ActiveMQ in Action本书实际上建议使用Retroactive来解决这个问题,因为在这种情况下使用两种服务存在棘手的竞争条件,您必须非常仔细地编写代码以避免它们。因此,根据每个人的建议,我宁愿只使用追溯功能,并将检索策略设置为1小时。对于我们的目标应该没问题。 – Thirlan

+0

作为一个通用的答案,我接受你的Petter,因为它对未来的读者很好,但它不是我们想要的解决方案。 – Thirlan

+0

啊哈,好吧。如果你正在谈论几个小时,那么你的罚款具有追溯力,这可能是最好的解决方案。如果案例要将数据保存数周甚至数年,那么您还有另一个问题。 –