2016-07-13 46 views
0

的顺序如果我有一个春天启动应用程序超过一个@JmsListener方法是有办法明确声明或者听者消耗从它的队列前,其他所有的消息?配置JmsListener执行

换句话说,如果我有

@JmsListener(destination = "queueOne") 
    public void processOrder1(String message) {. . .} 

@JmsListener(destination = "queueTwo") 
    public void processOrder2(String message) {. . .} 

是配置有可有processOrder1()运行完,关闭它,然后有processOrder2()运行?或者processOrder2()总是在processOrder1()之后执行(这是调试器的建议)?或者他们以某种方式分别独立运行?

如果他们不能在这样的,我想知道为什么没有办法进行配置。

回答

1

不与配置 - 每个听者都有自己独立的异步侦听容器。

您可以用autoStartup组配置容器厂false和编程方式启动每个容器 - 收到使用听者的id属性和start()/stop()它的容器注册表到容器的引用。

一个困难是你将如何“知道”第一个完成其工作。

+0

我采用了侦听器所在队列的初始队列深度,并为每个进入的消息递减该值。因此理想情况下,当计数为零时,正在处理的消息必须是最后一个。我如何确定关闭我的单个JmsListener。但有一个要求,我需要更多的队列。 –

+0

所以,从理论上讲,当我知道一个特定JmsListener结束后,我可以调用停止的那一个,然后基本上开始下一个,我想运行?虽然我在挖掘spring文档时可能错过了异步位......这也可能对我有利 –