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";
}
}
项目完整代码:https://github.com/yangyayu-last/rabbit
测试大于10个字的行大于10行
测试大于10个字的行大于10行
测试大于10个字的行大于10行
测试大于10个字的行大于10行
测试大于10个字的行大于10行
测试大于10个字的行大于10行
测试大于10个字的行大于10行
测试大于10个字的行大于10行
测试大于10个字的行大于10行
测试大于10个字的行大于10行