如何在 activemq.xml 中创建/预配置持久订阅者,以便这些订阅在 ActiveMQ 出现时准备就绪?好像订阅者处于离线状态。
我们期待一个固定(但可配置)数量的已知订阅者。想要缓冲从第 1 天开始发布者发送的所有消息,以防并非所有订阅者都已启动。不确定这是否是常见情况,但提前感谢您的帮助。
如何在 activemq.xml 中创建/预配置持久订阅者,以便这些订阅在 ActiveMQ 出现时准备就绪?好像订阅者处于离线状态。
我们期待一个固定(但可配置)数量的已知订阅者。想要缓冲从第 1 天开始发布者发送的所有消息,以防并非所有订阅者都已启动。不确定这是否是常见情况,但提前感谢您的帮助。
这是一个非常常见的用例。您实际上应该查看的是复合目的地,而不是持久主题(此功能存在大量问题,主要问题是默认情况下消息未持久化,因此无法在代理中断中幸存)。
使用此方案,您可以设置一个复合主题,将每条消息转发到多个队列——每个订阅者一个专用的队列。
<destinationInterceptors>
<virtualDestinationInterceptor>
<virtualDestinations>
<compositeTopic name="orders">
<forwardTo>
<queue physicalName="orders.consumer1" />
<queue physicalName="orders.consumer2" />
</forwardTo>
</compositeTopic>
</virtualDestinations>
</virtualDestinationInterceptor>
</destinationInterceptors>
这样,当您的订阅者最终连接到自己的队列时,它会耗尽输入其中的消息。
请注意,请确保您的内存限制足够大以处理存储在这些队列中的消息,否则您的代理将出现挂起(称为生产者流控制的代理功能)。
我看到您是新用户,所以如果这回答了您的问题,请打勾。
您可以考虑使用持久队列(而不是主题)并使用队列浏览器(订阅者)来接收消息。跟踪序列号的责任在于订阅者方面(不确定在您的情况下是否可行)。队列浏览器不会从持久队列中删除消息。您要么必须使用有时间的消息,要么可能在特定时间段后使用常规队列订阅者来清除旧消息。
具有持久队列的队列浏览器对服务器的负担较少 - 但您正在向订阅者施加更多负载。
希望能帮助到你。