在 JMS 队列侦听器 onMessage 方法中运行异步代码 [关闭]
Posted
技术标签:
【中文标题】在 JMS 队列侦听器 onMessage 方法中运行异步代码 [关闭]【英文标题】:Running asynchronous code inside JMS queue listener onMessage method [closed] 【发布时间】:2021-05-31 10:16:44 【问题描述】:在我的应用程序中,我将 JMS 消息发布到代表要执行的任务的队列中。当调用监听器的onMessage
方法时,我需要执行的任务自动运行在自己的线程中,所以是异步的。
应用程序是在 Spring Boot 上编写的,我使用 Kubernetes 进行容器编排,以便动态调整工作进程的数量。
我已经看到了实现这种工作队列和 JMS 侦听器模式的示例,并且我总是看到在 onMessage
方法中调用同步方法。
所以,我的问题是:等到异步操作完成后再返回onMessage
callback 会更好吗?
谢谢
【问题讨论】:
您需要在这里概述“更好”的实际含义。在确定一种方法是否比另一种“更好”时,您考虑了哪些标准?这个问题,因为它目前正在构建,将引发讨论和基于意见的答案,而不是基于事实的答案,这意味着它在 Stack Overflow 上是题外话。 【参考方案1】:在侦听器线程上执行异步处理通常不是一个好主意。
如果您想增加并发,请改为增加容器的并发(以创建多个消费者)。
如果您出于某种原因必须异步,则应暂停侦听器线程直到进程完成,以避免在发生故障时丢失消息。
此外,如果您退出侦听器,您可能会在当前消息完成之前收到一条新消息。即使使用 CLIENT_ACKNOWLEDGE,您也可以无序地确认消息,或者您必须跟踪未确认的消息。
通常,在侦听器线程上完成工作更简单。
【讨论】:
以上是关于在 JMS 队列侦听器 onMessage 方法中运行异步代码 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章