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

在Apache Artemis中使用旧消息主要新主题订阅者

毛缪文
2023-03-14

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

对于生产和登台系统,我发现持久订阅工作良好。我已经改编了ApacheCamel配置作为示例。以下是两个接收消息的消费者,每个消费者都使用持久订阅:

<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>

由于订阅之前不存在,消费者将不得不等待新消息。我正在寻找的是新的订阅者立即准备好可用的消息。我找到了不同的概念名称,如<code>预取策略,<code>消费者窗口大小,或“追溯消费者”。但我不清楚哪些术语适用于ApacheArtemis,以及如何设置它们,因为示例大多涉及ApacheActiveMQ。

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

共有1个答案

闽康安
2023-03-14

< code>prefetchPolicy不适用于ActiveMQ Artemis。是针对ActiveMQ 5.x的。

< code>consumerWindowSize确实适用于ActiveMQ Artemis。

但是,预取策略使用者WindowSize都不适用于这种情况,因为它们都与“流控制”有关,并且与将“丢失的”消息放入 JMS 主题订阅无关。

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

因此,您有几个选择:

  1. 等待 ActiveMQ 阿耳忒弥斯 2.11 发布(应在 1 月份发布)。
  2. 基于包含追溯地址功能的主分支构建您自己的 ActiveMQ Artemis 版本。
  3. 修改测试环境,以便新订阅者不必等待太长时间才能收到消息(例如,更频繁地发送消息)。
 类似资料: