如果我在Spring Boot应用程序中有多个@JmsListener
方法,有没有办法显式声明任何一个侦听器在其队列之前消耗其所有消息?
换句话说,如果我有
@JmsListener(destination = "queueOne")
public void processOrder1(String message) {. . .}
@JmsListener(destination = "queueTwo")
public void processOrder2(String message) {. . .}
是否有配置可以让processOrder1()
运行完成,关闭它,然后运行processOrder2()
?或者processOrder2()
总是会在processOrder1()
之后执行(这是调试器建议的)?或者它们是否以某种方式彼此独立地运行?
如果无法以这种方式配置它们,我想知道为什么不这样做。
答案 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}}它。
一个难点是你如何“知道”第一个人已完成其工作。