4

如何在 activemq.xml 中创建/预配置持久订阅者,以便这些订阅在 ActiveMQ 出现时准备就绪?好像订阅者处于离线状态。

我们期待一个固定(但可配置)数量的已知订阅者。想要缓冲从第 1 天开始发布者发送的所有消息,以防并非所有订阅者都已启动。不确定这是否是常见情况,但提前感谢您的帮助。

4

2 回答 2

6

这是一个非常常见的用例。您实际上应该查看的是复合目的地,而不是持久主题(此功能存在大量问题,主要问题是默认情况下消息未持久化,因此无法在代理中断中幸存)。

使用此方案,您可以设置一个复合主题,将每条消息转发到多个队列——每个订阅者一个专用的队列。

<destinationInterceptors>
  <virtualDestinationInterceptor>
    <virtualDestinations>
      <compositeTopic name="orders">
        <forwardTo>
          <queue physicalName="orders.consumer1" />
          <queue physicalName="orders.consumer2" />
        </forwardTo>
      </compositeTopic>
    </virtualDestinations>
  </virtualDestinationInterceptor>
</destinationInterceptors>

这样,当您的订阅者最终连接到自己的队列时,它会耗尽输入其中的消息。

请注意,请确保您的内存限制足够大以处理存储在这些队列中的消息,否则您的代理将出现挂起(称为生产者流控制的代理功能)。

我看到您是新用户,所以如果这回答了您的问题,请打勾。

于 2012-07-11T09:34:52.960 回答
0

您可以考虑使用持久队列(而不是主题)并使用队列浏览器(订阅者)来接收消息。跟踪序列号的责任在于订阅者方面(不确定在您的情况下是否可行)。队列浏览器不会从持久队列中删除消息。您要么必须使用有时间的消息,要么可能在特定时间段后使用常规队列订阅者来清除旧消息。

具有持久队列的队列浏览器对服务器的负担较少 - 但您正在向订阅者施加更多负载。

希望能帮助到你。

于 2012-07-03T23:36:36.600 回答