2012-07-03 27 views
2

如何在activemq.xml中创建/预配置持久订阅服务器,以便在ActiveMQ出现后就可以使用这些订阅服务?就好像用户处于离线状态一样。如何在activemq.xml中创建/预配置持久订户,以便在ActiveMQ启动时准备好这些订阅?

我们期待固定(但可配置)数量的已知订户。 如果不是所有订户 都启动,则希望缓冲发布商从第1天开始发送的所有信息。不知道这是否是一种常见的情况,但提前感谢帮助。

+0

对于以数据为中心的分布式系统,这是一种常见的情况,并且作为FYI,在使用使用Durability QoS的OMG DDS实现时,您的用例很容易实现。有关更多信息,请参阅[OMG数据分发服务门户](http://portals.omg.org/dds/)。 –

回答

5

这是一个非常常见的用例。实际上你应该看到的是composite destinations,而不是持久话题(这个功能存在很多问题,主要的是信息不被默认持续存在,因此不会存在代理中断)。

使用此方案,您可以设置一个复合主题,将每个消息转发到多个队列 - 每个用户专用一个队列。

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

通过这种方式,当用户最终连接到自己的队列时,会消耗馈送到其中的消息。

请谨慎使用,请确保您的memory limits are large enough处理存储在这些队列中的消息,或者您的代理似乎挂起(称为生产者流量控制的代理功能)。

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

+0

Thx为您的答案。我们会在什么情况下使用pub/durable sub而不是虚拟主题?我的印象虚拟虚拟主题似乎总体上是一个更好的发布/订阅方法,唯一的区别是队列支持? – user1500049

+0

实际上,我总是喜欢虚拟主题。我能想到的唯一用例是,我可能会考虑持久话题,例如连接到经纪商的网络客户端,几乎总是能够为追溯消费者服务。虚拟主题更容易考虑,可以通过JMX进行检查,可以连接池,可以在代理网络中正常工作,并且可以在其上设置目标策略(如消息过期,内存限制和DLQ)。总之,他们在各方面都非常好。如果有帮助,别忘了投票! –

0

您可以使用一个持久队列(而不是一个主题)并使用队列浏览器(订阅者)来接收消息。追踪序列号的责任在用户端(不确定在你的情况下是否可行)。队列浏览器不会从持久队列中删除消息。您必须使用带时间的消息,或者在特定时间段后使用常规队列用户来清除旧消息。

具有持久队列的队列浏览器在服务器上的纳税越来越少 - 但是您正在向订户推送更多的负载。

希望它有帮助。

相关问题