2017-07-31 735 views
1

在SpringBoot兔MQ項目,我有這樣的配置。春天引導兔MQ spring.rabbitmq.listener.simple.concurrency永遠不會奏效

@EnableRabbit 
@Configuration 
public class MQConfig { 

private final String primaryQueueName; 
private final String deadLetterQueueName; 

@Autowired 
private ConnectionFactory cachingConnectionFactory; 

public MQConfig( 
       @Value("${primaryQueue.name}")String primaryQueueName, 
       @Value("${deadLetterQueue.name}")String deadLetterQueueName){ 

    this.primaryQueueName=primaryQueueName; 
    this.deadLetterQueueName=deadLetterQueueName; 
} 


@Bean 
public Queue primaryQueue() { 
    Map<String, Object> args = new HashMap<String, Object>(); 
    // The default exchange 
    args.put("x-dead-letter-exchange", ""); 
    // Route to the incoming queue when the TTL occurs 
    args.put("x-dead-letter-routing-key", deadLetterQueueName); 
    // TTL 500 seconds 
    args.put("x-message-ttl", 300000); 
    return new Queue(primaryQueueName, false, false, false, args); 
} 

@Bean 
public Queue deadLetterQueue() { 
    return new Queue(deadLetterQueueName); 
}} 

我的聽衆的樣子,

@Component 
public class Receiver { 
private static final Logger LOGGER = LoggerFactory.getLogger(Receiver.class); 

    @Autowired 
    private JavaMailSender mailSender; 


@RabbitListener(queues = "${primaryQueue.name}") 
public void receiveMessage(SimpleMailMessage message){ 
    LOGGER.info("Sending email message : "+message); 
    try { 
     mailSender.send(message); 
    }catch(Exception e) { 
     LOGGER.error("Failed to deliver email",e); 
     throw e; 
    } 

}} 

到目前爲止好,消息來一次隊列,消費者消費他們,他們都去了死信隊列,如果由於某種原因,消費者不能使用它們給出TTL 300000

現在,我要帶彈簧application.properties進一步配置監聽器,但他們都對它沒有影響。 例如我設置spring.rabbitmq.listener.simple.concurrency = 3,但它仍然創建一個消費者,但是在代碼工作中明確地設置它。虛空工程等設置,

spring.rabbitmq.listener.simple.acknowledge-mode= # Acknowledge mode of container. 
spring.rabbitmq.listener.simple.auto-startup=true # Start the container automatically on startup. 
spring.rabbitmq.listener.simple.concurrency= # Minimum number of consumers. 
spring.rabbitmq.listener.simple.default-requeue-rejected= # Whether or not to requeue delivery failures; default `true`. 
spring.rabbitmq.listener.simple.idle-event-interval= # How often idle container events should be published in milliseconds. 
spring.rabbitmq.listener.simple.max-concurrency= # Maximum number of consumers. 
spring.rabbitmq.listener.simple.prefetch= # Number of messages to be handled in a single request. It should be greater than or equal to the transaction size (if used). 
spring.rabbitmq.listener.simple.retry.enabled=false # Whether or not publishing retries are enabled. 
spring.rabbitmq.listener.simple.retry.initial-interval=1000 # Interval between the first and second attempt to deliver a message. 
spring.rabbitmq.listener.simple.retry.max-attempts=3 # Maximum number of attempts to deliver a message. 
spring.rabbitmq.listener.simple.retry.max-interval=10000 # Maximum interval between attempts. 
spring.rabbitmq.listener.simple.retry.multiplier=1.0 # A multiplier to apply to the previous delivery retry interval. 
spring.rabbitmq.listener.simple.retry.stateless=true # Whether or not retry is stateless or stateful. 
spring.rabbitmq.listener.simple.transaction-size= 

https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html 任何想法?我配置錯誤嗎?

回答