rabbitMQ動態啓動,停止。springboot集成rabbitMQ,無法連接時,也能正常啓動

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章