配置JmsListener执行的顺序

时间:2016-07-13 15:14:34

标签: java spring-boot spring-jms

如果我在Spring Boot应用程序中有多个@JmsListener方法,有没有办法显式声明任何一个侦听器在其队列之前消耗其所有消息?

换句话说,如果我有

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

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

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

如果无法以这种方式配置它们,我想知道为什么不这样做。

1 个答案:

答案 0 :(得分:1)

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

您可以将容器工厂配置为CREATE OR REPLACE FUNCTION test_function(id integer, dt date, days int[], accts text[], flag boolean) RETURNS float[] AS $$ DECLARE pt_dates date[]; pt_amt integer[]; amt float[]; BEGIN if cleared then pt_dates := array(select dt from tabl); pt_amt := array(select amt from tab1); if array_upper(days, 1) is not null then for j in 1 .. array_upper(days, 1) loop amt+=amt; end loop; end if; return amt; END; $$ LANGUAGE plpgsql; 设置为autoStartup并以编程方式启动每个容器 - 使用侦听器的false属性和{{从容器注册表获取对容器的引用1}}它。

一个难点是你如何“知道”第一个人已完成其工作。