Skip to content

Commit

Permalink
GH-1208: Allow SpEL in all @RabbitListener Props
Browse files Browse the repository at this point in the history
Resolves #1208

Also polish code for setting consumer arguments.

**cherry-pick to 2.2.x**
  • Loading branch information
garyrussell authored and artembilan committed Jun 17, 2020
1 parent 0fa0a95 commit 6aacdff
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 14 deletions.
Expand Up @@ -438,7 +438,7 @@ else if (errorHandler instanceof String) {
}

endpoint.setExclusive(rabbitListener.exclusive());
String priority = resolve(rabbitListener.priority());
String priority = resolveExpressionAsString(rabbitListener.priority(), "priority");
if (StringUtils.hasText(priority)) {
try {
endpoint.setPriority(Integer.valueOf(priority));
Expand Down Expand Up @@ -475,7 +475,7 @@ else if (ackMode instanceof AcknowledgeMode) {
}

private void resolveAdmin(MethodRabbitListenerEndpoint endpoint, RabbitListener rabbitListener, Object adminTarget) {
String rabbitAdmin = resolve(rabbitListener.admin());
String rabbitAdmin = resolveExpressionAsString(rabbitListener.admin(), "admin");
if (StringUtils.hasText(rabbitAdmin)) {
Assert.state(this.beanFactory != null, "BeanFactory must be set to resolve RabbitAdmin by bean name");
try {
Expand All @@ -494,7 +494,8 @@ private RabbitListenerContainerFactory<?> resolveContainerFactory(RabbitListener
Object factoryTarget, String beanName) {

RabbitListenerContainerFactory<?> factory = null;
String containerFactoryBeanName = resolve(rabbitListener.containerFactory());
String containerFactoryBeanName = resolveExpressionAsString(rabbitListener.containerFactory(),
"containerFactory");
if (StringUtils.hasText(containerFactoryBeanName)) {
assertBeanFactory();
try {
Expand All @@ -512,7 +513,7 @@ private RabbitListenerContainerFactory<?> resolveContainerFactory(RabbitListener
private void resolveExecutor(MethodRabbitListenerEndpoint endpoint, RabbitListener rabbitListener,
Object execTarget, String beanName) {

String execBeanName = resolve(rabbitListener.executor());
String execBeanName = resolveExpressionAsString(rabbitListener.executor(), "executor");
if (StringUtils.hasText(execBeanName)) {
assertBeanFactory();
try {
Expand All @@ -528,7 +529,7 @@ private void resolveExecutor(MethodRabbitListenerEndpoint endpoint, RabbitListen
private void resolvePostProcessor(MethodRabbitListenerEndpoint endpoint, RabbitListener rabbitListener,
Object target, String beanName) {

String ppBeanName = resolve(rabbitListener.replyPostProcessor());
String ppBeanName = resolveExpressionAsString(rabbitListener.replyPostProcessor(), "replyPostProcessor");
if (StringUtils.hasText(ppBeanName)) {
assertBeanFactory();
try {
Expand All @@ -554,7 +555,7 @@ protected String noBeanFoundMessage(Object target, String listenerBeanName, Stri

private String getEndpointId(RabbitListener rabbitListener) {
if (StringUtils.hasText(rabbitListener.id())) {
return resolve(rabbitListener.id());
return resolveExpressionAsString(rabbitListener.id(), "id");
}
else {
return "org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#" + this.counter.getAndIncrement();
Expand Down
Expand Up @@ -726,8 +726,10 @@ public void setConsumerArguments(Map<String, Object> args) {
* @return the arguments.
* @since 2.0
*/
protected Map<String, Object> getConsumerArguments() {
return this.consumerArgs;
public Map<String, Object> getConsumerArguments() {
synchronized (this.consumersMonitor) {
return new HashMap<>(this.consumerArgs);
}
}

/**
Expand Down
Expand Up @@ -19,7 +19,6 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

import org.springframework.amqp.core.AcknowledgeMode;
Expand Down Expand Up @@ -359,7 +358,7 @@ public void setupListenerContainer(MessageListenerContainer listenerContainer) {

container.setExclusive(isExclusive());
if (getPriority() != null) {
Map<String, Object> args = new HashMap<String, Object>();
Map<String, Object> args = container.getConsumerArguments();
args.put("x-priority", getPriority());
container.setConsumerArguments(args);
}
Expand Down
@@ -1,5 +1,5 @@
/*
* Copyright 2014-2019 the original author or authors.
* Copyright 2014-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -289,9 +289,10 @@ public void fullHandle(String msg) {
@Component
static class FullConfigurableBean {

@RabbitListener(id = "${rabbit.listener.id}", containerFactory = "${rabbit.listener.containerFactory}",
@RabbitListener(id = "#{'${rabbit.listener.id}'}",
containerFactory = "#{'${rabbit.listener.containerFactory}'}",
queues = {"${rabbit.listener.queue}", "queue2"}, exclusive = true,
priority = "${rabbit.listener.priority}", admin = "${rabbit.listener.admin}")
priority = "#{'${rabbit.listener.priority}'}", admin = "#{'${rabbit.listener.admin}'}")
public void fullHandle(String msg) {

}
Expand Down
Expand Up @@ -1089,7 +1089,7 @@ public String multiQueuesConfig(String foo) {
return foo.toUpperCase() + foo;
}

@RabbitListener(queues = "test.header", group = "testGroup", replyPostProcessor = "echoPrefixHeader")
@RabbitListener(queues = "test.header", group = "testGroup", replyPostProcessor = "#{'echoPrefixHeader'}")
public String capitalizeWithHeader(@Payload String content, @Header String prefix) {
return prefix + content.toUpperCase();
}
Expand Down

0 comments on commit 6aacdff

Please sign in to comment.