运行 JMS 队列侦听器 onMessage 方法中的异步代码

Running asynchronous code inside JMS queue listener onMessage method

在我的应用程序中,我将 JMS 消息发布到代表要执行的任务的队列中。当监听器的onMessage方法被调用时,我需要执行的任务自动运行在它自己的线程中,所以它是异步的。

该应用程序是在 Spring 启动时编写的,我正在使用 Kubernetes 进行容器编排,以便动态调整工作进程的数量。

我看过实现这种工作队列和 JMS 侦听器模式的示例,并且我一直看到在 onMessage 方法中调用同步方法。

所以,我的问题是:等到异步操作完成后再返回 onMessage 回调是否更好?

谢谢

在侦听器线程上执行异步处理通常不是一个好主意。

如果要增加并发,请改为增加容器的并发(创建多个消费者)。

如果您出于某种原因必须进行异步操作,您应该暂停侦听器线程直到进程完成,以避免在发生故障时丢失消息。

此外,如果您退出侦听器,您可能会在当前消息完成之前收到一条新消息。即使使用 CLIENT_ACKNOWLEDGE,您也可能会乱序确认消息,或者您必须跟踪未确认的消息。

一般来说,在侦听器线程上完成工作会更简单。