Java 如何在activemq.xml中创建/预配置持久订户,以便在activemq启动时准备好这些订阅?

Java 如何在activemq.xml中创建/预配置持久订户,以便在activemq启动时准备好这些订阅?,java,jms,activemq,publish-subscribe,subscriber,Java,Jms,Activemq,Publish Subscribe,Subscriber,如何在activemq.xml中创建/预配置持久订户,以便在启动activemq时这些订户已就绪?就像订阅者处于脱机状态一样 我们希望已知订户的数量是固定的(但可以配置)。 希望从第1天开始缓冲发布者发送的所有MSG,以防不是所有订阅者 你起来了。不确定这是否是常见的情况,但提前感谢您的帮助。您可以研究使用持久队列(与主题相反)和使用队列浏览器(订阅者)来接收消息。跟踪序列号的责任则在用户端(不确定在您的情况下是否可行)。队列浏览器不会从持久队列中删除消息。您要么使用有生存时间的消息,要么在特定

如何在activemq.xml中创建/预配置持久订户,以便在启动activemq时这些订户已就绪?就像订阅者处于脱机状态一样

我们希望已知订户的数量是固定的(但可以配置)。 希望从第1天开始缓冲发布者发送的所有MSG,以防不是所有订阅者
你起来了。不确定这是否是常见的情况,但提前感谢您的帮助。

您可以研究使用持久队列(与主题相反)和使用队列浏览器(订阅者)来接收消息。跟踪序列号的责任则在用户端(不确定在您的情况下是否可行)。队列浏览器不会从持久队列中删除消息。您要么使用有生存时间的消息,要么在特定时间段后使用常规队列订阅者清除旧消息

具有持久队列的队列浏览器对服务器的负担较小,但会增加订阅者的负载


希望有帮助。

这是一个非常常见的用例。实际上,您应该关注的是,而不是持久性主题(此功能存在大量问题,主要问题是消息在默认情况下没有持久化,因此无法在代理中断后生存)

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

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

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

需要注意的是,请确保您的代理必须处理存储在这些队列中的消息,否则您的代理将出现挂起(一个称为producer flow control的代理函数)


我知道您是新用户,因此如果这回答了您的问题,请勾选它。

这是以数据为中心的分布式系统的常见场景,仅供参考,在使用OMG DDS实现时,使用持久性QoS很容易实现您的用例。请参阅了解更多信息。Thx了解您的答案。在什么情况下,我们会使用发布/持久订阅而不是虚拟主题?我的印象是,迄今为止,虚拟主题总体上似乎是一种更好的发布/订阅方式,唯一的区别是队列支持?在实践中,我总是喜欢虚拟主题。我能想到的唯一的用例是,我可以考虑持久的话题,比如连接到经纪人的网络客户,几乎总是由回头客更好地服务。虚拟主题更容易思考,可以通过JMX进行检查,可以连接池,在代理网络中正常工作,并设置目标策略(如消息过期、内存限制和DLQ)。简言之,他们在各方面都相当出色。如果有帮助的话,别忘了投赞成票!