我正在配置一个 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&durableSubscriptionName=staging"/>
<to uri="file:outbox-staging"/>
</route>
<route id="outbox-production">
<from uri="activemq:topic:testing?clientId=production&durableSubscriptionName=production"/>
<to uri="file:outbox-production"/>
</route>
这可以。如果消费者离线,它将在重新在线时接收消息。现在,如果另一个消费者加入测试;
<route id="outbox-testing" streamCache="true">
<from uri="activemq:topic:testing?clientId=my-local-consumer&durableSubscriptionName=my-local-consumer"/>
<to uri="file:outbox-local"/>
</route>
因为订阅之前不存在,所以消费者将不得不等待新消息。我正在寻找的是新的订阅者可以立即获得可用的消息。我为这个概念找到了不同的名称,例如prefetchPolicy
、consumerWindowSize
或“追溯消费者”。但我不清楚哪些术语适用于 Apache Artemis 以及如何设置它们,因为这些示例大多是指 Apache ActiveMQ。
如何配置 Artemis 以便加入新订阅的消费者获取过去的消息?