I have to pass the queuename dynamically from the extended method dynamically. I am getting below exception
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
Code:
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);
} }
That SpEL expression deals with beans in its context. So, your
rabbitmqQueuemust be a bean name, not a property in your class. Well, it still can be, but as a getter on some bean.That
queuesattribute can accept a property placeholder:queues = "${my.rabbitmqQueue}"