我有3个不同服务器的监听器。在部署时,我在server1部署应用程序时,我希望server1的监听器停止监听新消息。但我希望监听器在此服务器上完成他们已经处理的任务。 我的Xml配置是 Rabbit.xml
<rabbit:connection-factory id="connectionFactory" host="localhost" username="guest" password="guest" virtual-host="/"/>
<rabbit:template id="rabbitTemplate" connection- factory="connectionFactory" reply-timeout="10" />
<rabbit:admin connection-factory="connectionFactory" />
<rabbit:listener-container id="group" connection-factory="connectionFactory" concurrency="10" error-handler="genericErrorHandler" >
<rabbit:listener ref="MailListener" method="listen" queue-names="promoMailQueue" />
</rabbit:listener-container>
要停止监听器,我试图停止SimplemessageListener。
ClassPathXmlApplicationContext ctx;
SimpleMessageListenerContainer messageListener;
public SimpleMessageListenerContainer getContainer(){
ctx= new ClassPathXmlApplicationContext("Rabbit.xml")
messageListener (SimpleMessageListenerContainer)ctx.getBean("group");
return messageListener;
}
public void getContainer(){
SimpleMessageListenerContainer simpleMessageListenerContainer = getContainer();
simpleMessageListenerContainer.stop();
simpleMessageListenerContainer.destroy();
}
我执行此操作仍然会在我的听众身上受到影响,请建议安全。
答案 0 :(得分:1)
已经排队等待侦听器的任何消息都将在停止之前处理。默认预取为1,因此每个使用者(10个)将在stop()
之后处理最多1个消息。
因此,虽然通常只会处理当前正在处理的消息,但有些新消息可能会启动;这一切都取决于时机。
将预取增加到1以上就更有可能。
启用DEBUG日志记录以检查行为。