如果我在 Spring Boot 应用程序中有多个 @JmsListener
方法,是否有一种方法可以显式声明任一监听器在另一个监听器之前消耗其队列中的所有消息?
换句话说,如果我有
@JmsListener(destination = "queueOne")
public void processOrder1(String message) {. . .}
@JmsListener(destination = "queueTwo")
public void processOrder2(String message) {. . .}
是否有配置可以让 processOrder1()
运行完成,关闭它,然后运行 processOrder2()
?或者 processOrder2()
总是在 processOrder1()
之后执行(这是调试器建议的)?或者它们是否以某种方式彼此独立地单独运行?
如果它们不能以这种方式配置,我想知道为什么不。
最佳答案
不进行配置 - 每个监听器都有自己独立的异步监听器容器。
您可以将容器工厂的 autoStartup
设置为 false
并以编程方式启动每个容器 - 使用监听器的 从容器注册表获取对容器的引用id
属性和 start()/stop()
它。
一个困难是你如何“知道”第一个已经完成了它的工作。
关于java - 配置JmsListener执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38355617/