java - 在 Spring Boot 上动态修改 @JMSListener 目标

标签 java spring spring-boot jms spring-jms

我开发了一个 @JMSListener,它从 Java 属性获取目的地并且工作得很好。

但现在我需要能够在运行时更改队列的“目的地”,而不必重置整个应用程序,即使我在运行时修改属性,队列“目的地”也不会更改。

以下是我们如何实现@JMSListener:


import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.jms.support.converter.MessageConverter;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;

@Component("b2b.CCRReceiver")
@Slf4j
public class CCRReceiver {

  //SOME_VARIABLES

    @Transactional
    @JmsListener(destination = "${tibco.configuration.queues.upsert}", containerFactory = "jmsFactory", concurrency = "${jms.concurrency}")
    public void receiveMessage(Message message) {
        //DO_SOME_STUFF
    }
}

如您所见,我第一次从值表达式获取目的地并且工作正常,但后来我不知道如何访问 JMSListener 并更改其目的地。

这可以做到吗?有什么办法可以改变目的地吗?

或者我必须以其他允许我执行此操作的方式来实现此 JMS 监听器?

最佳答案

这应该有效:

  • 为监听器提供一个 id 属性

  • 自动连接JmsListenerEndpointRegistry(或以其他方式获取对其的引用)

  • registry.getListenerContainer("myListener").stop();

  • registry.getListenerContainer("myListener").shutdown();

  • ((AbstractMessageListenerContainer)registry.getListenerContainer("myListener")) .setDestinationName("newOne")

  • registry.getListenerContainer("myListener").initialize();

  • registry.getListenerContainer("myListener").start();

关于java - 在 Spring Boot 上动态修改 @JMSListener 目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60453259/

相关文章:

java - 如何在不将 null 作为输出的情况下打印 getter String?

Spring Boot 如何在 application.properties 中为 yaml 设置 spring.config.location

java - Spring-Boot 中的多个数据库与 mariaDB

java - Spring Boot @WebMvcTest 登录成功返回404

java - 如何让两个构造函数具有相同数量的参数但在java中用于不同的变量

java - Java GraphQL 模式中的 HashMap

Java、MySQL : how to connect dependent combobox based on another one

java - Spring Java 日期到日期模式验证

spring - 如何配置自定义源来提供 Spring Boot 的 @ConfigurationProperties

java - SonarQube 错误 : Singleton class writes to a field in an Unsynchronized manner