在Apache Artemis中使用旧消息为新主题的订阅者充值

时间:2019-12-19 15:12:01

标签: activemq-artemis durable-subscription

我正在配置Apache Artemis消息代理。代理将接受大文件,下游使用者将访问该主题以处理最新文件。现在,我想知道如何使最新文件可用于开发运行。由于消息每天仅到达几次,因此测试运行将需要访问最后发送的几条消息,而不能等待下一条消息。

对于生产和登台系统,我发现持久订阅可以正常工作。我已经修改了Apache Camel配置作为示例。这是两个接收消息的使用者,每个使用者都使用持久订阅:

<route id="inbox">
    <from uri="file:inbox"/>
    <to uri="activemq:topic:testing"/>
</route>

<route id="outbox-staging">
    <from uri="activemq:topic:testing?clientId=staging&amp;durableSubscriptionName=staging"/>
    <to uri="file:outbox-staging"/>
</route>
<route id="outbox-production">
    <from uri="activemq:topic:testing?clientId=production&amp;durableSubscriptionName=production"/>
    <to uri="file:outbox-production"/>
</route>

很好。如果消费者处于脱机状态,它将在重新联机时接收消息。现在,如果另一个消费者加入进行测试;

<route id="outbox-production" streamCache="true">
    <from uri="activemq:topic:testing?clientId=my-local-consumer&amp;durableSubscriptionName=my-local-consumer"/>
    <to uri="file:outbox-local"/>
</route>

因为该订阅之前不存在,所以使用者将不得不等待新消息。我正在寻找的是新订户,这些新订户将立即被可用消息填充。我为该概念找到了不同的名称,例如prefetchPolicyconsumerWindowSize或“追溯消费者”。但是我不清楚哪个术语适用于Apache Artemis以及如何设置它们,因为这些示例主要涉及Apache ActiveMQ。

如何配置Artemis,以便加入新订阅的消费者获得过去的消息?

1 个答案:

答案 0 :(得分:1)

prefetchPolicy不适用于ActiveMQ Artemis。用于ActiveMQ 5.x。

consumerWindowSize确实适用于ActiveMQ Artemis。

但是,prefetchPolicyconsumerWindowSize都不适用于这种情况,因为它们都与“流控制”有关,并且与将“缺失”消息放入JMS主题订阅无关。 / p>

“追溯使用者”功能适用于ActiveMQ5.x。 ActiveMQ Artemis 2.11中将提供类似的功能(称为“追溯地址”)。它是ARTEMIS-2504的一部分。

因此,您有一些选择:

  1. 等待ActiveMQ Artemis 2.11发行(应于1月发行)。
  2. 基于master分支(包含追溯地址功能)构建您自己的ActiveMQ Artemis版本。
  3. 修改您的测试环境,以使新订户不必等待太久的消息(例如,更频繁地发送消息)。