2017-01-13 78 views
0

在我的场景中,生产者正在将消息发送到队列(与往常一样:),但消费者中的一个不时关闭,所以我必须能够读取所有消息在消费者关闭时发送到该队列。换句话说,我正在寻找消息或整个服务器的配置,允许消费者重新连接后接收消息,而消息是事先发送的。ActiveMQ从客户端连接之前发送的队列中接收消息

更准确地说,当客户端重新连接时,它无法接收队列中挂起的消息。我需要的是强制新连接的客户端接收队列中已经挂起的消息,以帮助其他客户端解除队列。

回答

2

这是定义的正常行为,发送到队列的消息仍然未决,如果没有消费者连接,则不会丢失。

UPDATE

所以,我认为你的问题是prefetchPolicy。

persistent queues (default value: 1000) 
non-persistent queues (default value: 1000) 
persistent topics (default value: 100) 
non-persistent topics (default value: Short.MAX_VALUE - 1) 

,所以我认为,所有的消息被分派到所连接的消费者,当另外一个连接,他没有收到邮件,因此,如果你有需要prefetchPolicy设置为队列并发用户更改此行为比默认值更低的值。例如将此jms.prefetchPolicy.queuePrefetch=1添加到activemq.xml中的uri配置中,或将其设置在客户端url上。

建议使用较大的预取值以实现高性能,并且消息数量较多。但是,对于消息量较小的消息,每个消息需要很长时间才能处理,预取应设置为1. 这确保消费者一次只处理一条消息。 但是,指定预取限制为零将导致消费者 轮询一次一个消息,而不是将消息推送给使用者,该消息是 。

看看http://activemq.apache.org/what-is-the-prefetch-limit-for.html

而且

http://activemq.apache.org/destination-options.html

+0

我想补充一点,你可能需要设置消息持久发送时,这些邮件将被保存,如果代理重新启动以及。 –

+0

当然是的如果需要 –

+0

感谢您的建议,但我认为我被误解了,所以我延长了我的问题。 – MarcinB

相关问题