rabbitMQ配置動態啓動,rabbitMQ代理不正常時可以不啓動項目中MQ的監聽,主要解決,項目和MQ的啓動順序的問題。
默認不啓動rebbitMQ
#生產者
spring.rabbitmq.listener.direct.auto-startup=false
#消費者
spring.rabbitmq.listener.simple.auto-startup=false
可以通過控制層,測試去啓動,生成環境是通過一個線程,一個去查看rabbit的代理服務器是否正常,正常的時候就開啓rabbit的監聽。
消費者:
package com.example.demo.main;
import java.util.Set;
import javax.annotation.Resource;
import org.springframework.amqp.rabbit.listener.RabbitListenerEndpointRegistry;
import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("rabbitmq/listener")
public class RabbitMQController {
@Resource
private RabbitListenerEndpointRegistry rabbitListenerEndpointRegistry;
@RequestMapping("stop")
public String stop(){
rabbitListenerEndpointRegistry.stop();
System.out.println("停止MQ監聽");
return "success";
}
@RequestMapping("start")
public String start(){
rabbitListenerEndpointRegistry.start();
System.out.println("啓動MQ監聽");
return "success";
}
@RequestMapping("setup")
public String setup(int consumer, int maxConsumer){
Set<String> containerIds = rabbitListenerEndpointRegistry.getListenerContainerIds();
SimpleMessageListenerContainer container = null;
for(String id : containerIds){
container = (SimpleMessageListenerContainer) rabbitListenerEndpointRegistry.getListenerContainer(id);
if(container != null){
container.setConcurrentConsumers(consumer);
container.setMaxConcurrentConsumers(maxConsumer);
}
}
System.out.println("設置");
return "success";
}
}