需要在RabbitMQListner中动态传递队列名称

问题描述 投票:0回答:1

我必须从扩展方法动态传递队列名称。 我遇到异常

Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'rabbitmqQueue' cannot be found on object of type 'org.springframework.beans.factory.config.BeanExpressionContext' - maybe not public or not valid?
at org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:217) ~[spring-expression-5.3.22.jar:5.3.22]
at org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:104) ~[spring-expression-5.3.22.jar:5.3.22]
at org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:91) ~[spring-expression-5.3.22.jar:5.3.22]
at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:112) ~[spring-expression-5.3.22.jar:5.3.22]
at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:273) ~[spring-expression-5.3.22.jar:5.3.22]
at org.springframework.context.expression.StandardBeanExpressionResolver.evaluate(StandardBeanExpressionResolver.java:167) ~[spring-context-5.3.22.jar:5.3.22]
... 29 common frames omitted

代码:

public abstract class RabbitmqConsumerService {

String rabbitmqQueue;
protected RabbitmqConsumerService(String rabbitmqQueue) {
    this.rabbitmqQueue =rabbitmqQueue;
}


/**
 * This message is used to consume the message from common interface.
 *
 * @param message
 */
@RabbitListener(queues = "#{rabbitmqQueue}")
public void consume(String message) {
    LoggingUtils.debug(log, "Received Message: {}", message);
}   

}

public class NodeHierarchyMessageReceiver<V> extends RabbitmqConsumerService {

@Autowired
NodeHierarchyService nodeHierarchyService;

public NodeHierarchyMessageReceiver(@Value("${mt.message.queue}") String queueName2) {
    super(queueName2);
}

@Override
public void consume(String message) {
    LoggingUtils.debug(log, "Message got received:{}", message);

} }

spring-boot rabbitmq spring-el
1个回答
0
投票

SpEL 表达式处理其上下文中的 bean。 所以,你的

rabbitmqQueue
必须是一个 bean 名称,而不是你的类中的属性。 好吧,它仍然可以,但作为一些豆子的吸气剂。

queues
属性可以接受属性占位符:
queues = "${my.rabbitmqQueue}"

© www.soinside.com 2019 - 2024. All rights reserved.