ActiveMQ 如何在用 JmsListener 注释的方法内发送异步消息

ActiveMQ how to send async message inside method annotated with JmsListener

我的目标很简单,我必须在收到来自 JmsListener 的消息后立即发送通知(关于进行中状态)。

到目前为止我所做的是在 yml 中设置异步发送

broker-url: tcp://localhost:61616?jms.useAsyncSend=true

什么都没发生,显然不是那样的

我的问题是所有消息都是在消息处理完毕后才发送的。它看起来像同步模式。

我的简化代码如下所示

@JmsListener(destination = "${messagesQueue}")
public void handleMessage(Message message){
   jmsTemplate.convertAndSend("statusQueue", Status.IN_PROGRESS);
   //... processing stuff
   //... onSuccess
   jmsTemplate.convertAndSend("statusQueue", Status.OK);

   //... onFailure
   jmsTemplate.convertAndSend("statusQueue", Status.ERROR);

}

我使用 spring 全自动配置启动

欢迎任何建议!我该怎么办?

好的,我通过将初始进行中消息传递给另一个线程找到了解决方法。

new Thread(() -> {
        jmsTemplate.convertAndSend("statusQueue", Status.IN_PROGRESS);
}).start();

看起来很丑,我不认为它是最终解决方案,但它可能对其他人有帮助。