【问题标题】:How to add different destination dynamically to JMSListener Annotation in Spring boot?如何在 Spring Boot 中向 JMSListener Annotation 动态添加不同的目的地?
【发布时间】:2020-10-23 02:59:39
【问题描述】:

我正在开发一个从 Azure 服务总线读取消息的应用程序。此应用程序是使用 spring boot、Spring jms 和 Qpid jms 客户端创建的。我能够从队列中正确读取消息,没有任何问题。 PFB 我用来阅读消息的代码。

@Service
public class QueueReceiver {
@JmsListener(destination = "testing")
public void onMessage(String message) {
    if (null != message) {
        System.out.println("Received message from Queue: " + message);
    }
}}

问题是我们对不同的环境有不同的目的地,例如testing 用于devtesting-qa 用于qatesting-prod 用于production,所有这些值在不同的应用程序中提供为azure.queueName -(ENV).properpties 分别。我想将这些目的地动态传递给 JmsListener Annotation 中的目的地。当我尝试使用

@Value("${azure.queueName}")
private String dest;

并将 dest 传递给 @JmsListener(destination = dest) 等注释

我收到The value for annotation attribute JmsListener.destination must be a constant expression 错误。在使用此错误进行谷歌搜索后,我发现我们无法将动态值传递给 Annotation。请帮助我如何解决此问题或任何其他解决方案。

【问题讨论】:

    标签: java spring-boot jms spring-jms spring-annotations


    【解决方案1】:

    使用

    destination="${azure.queueName}"
    

    即将占位符直接放在注解中。

    【讨论】:

      【解决方案2】:

      您可以使用 application.properties 文件中定义的动态名称。例如:

      @JmsListener(destination = "${queue.name}")
      

      由于您无法在此处访问任何类变量,因此这是可用的最佳选择。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-09
        • 1970-01-01
        相关资源
        最近更新 更多