0


@RabbitListener(quques=“ “)用法注意(RabbitMq)

当我们使用@RabbitListener监听指定的Rabbit队列消息时。

注解里需要常量,不可以用动态变量。

所以我们在配置文件里获得的变量,不可以直接使用。

例如

@Value("${BootstrapConfig.TcpConfig.brokerId}")
private String brokerId;
@RabbitListener(queues = brokerId)

这种写法,@rabbitListener会报错,队列名字我们没有使用常量。

@RabbitListener

注解中,指定的队列名称需要是常量。这意味着它必须是编译时确定的,而不能是在运行时动态计算的。

根据RabbitMQ和Spring AMQP的要求,

@RabbitListener

注解的

queues

属性需要接受一个常量,以便在应用程序启动时就能确定要监听的队列。

因此,您不能将非静态变量或在运行时动态计算的值直接传递给

@RabbitListener

注解的

queues

属性。这将导致编译错误或无法正确注册消息监听器。

解决方法:

#{${BootstrapConfig.TcpConfig.brokerId}}

是Spring表达式语言(SpEL)的一种写法,用于在Spring框架中动态获取属性值。

在这种写法中,

${BootstrapConfig.TcpConfig.brokerId}

表示从配置文件中读取

BootstrapConfig.TcpConfig.brokerId

属性的值。然后,通过SpEL的

#{}

语法将该属性值注入到

@RabbitListener

注解中的队列名称中。

具体来说,

#{}

是SpEL表达式的起始和结束标记,

$

表示属性引用,

${BootstrapConfig.TcpConfig.brokerId}

表示要引用的属性的键。

通过使用SpEL表达式,可以在运行时动态地获取和注入属性值,而不需要使用静态变量。这样可以提高代码的灵活性和可维护性。

所以解决之后的代码变成了:

@RabbitListener(queues =RabbitMQConfig.QUEUE_NAME+"#{${BootstrapConfig.TcpConfig.brokerId}}")
    public void receiveMessage(String message) {
        System.out.println("Received message: " + message);
        // 处理接收到的消息
    }

测试后,正常可用。

标签: java 开发语言

本文转载自: https://blog.csdn.net/qq_43237354/article/details/131744484
版权归原作者 DRen1 所有, 如有侵权,请联系我们删除。

“@RabbitListener(quques=“ “)用法注意(RabbitMq)”的评论:

还没有评论