1

我正在配置一个 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-testing" 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 以便加入新订阅的消费者获取过去的消息?

4

1 回答 1

1

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

consumerWindowSize确实适用于 ActiveMQ Artemis 。

但是,既不适用prefetchPolicy也不consumerWindowSize适用于这种情况,因为它们都与“流控制”相关,并且与将“错过”消息放入 JMS 主题订阅无关。

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

因此,您有几个选择:

  1. 等待 ActiveMQ Artemis 2.11 发布(应该在一月份发布)。
  2. 基于master包含追溯地址功能的分支构建您自己的 ActiveMQ Artemis 版本。
  3. 修改您的测试环境,以便新订阅者不必等待很长时间才能收到消息(例如更频繁地发送消息)。
于 2019-12-19T16:03:56.817 回答