栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springboot项目RabbitMq手动开启/关闭监听

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springboot项目RabbitMq手动开启/关闭监听

前言

在springboot项目中使用rabbitmq的@RabbitListener自动开启监听。而如果直接上了生产环境,在升级时候贸然kill掉,可能会损坏业务链条。实为不妥。

1、自动启动监听
@RabbitListener(queues = "#{queue}",concurrency = "#{concurrency}")
public void receiveMsg(SmsMsg message) {

}
2、手动关闭所有监听

当我们想kill掉程序的时候,可以使用kill -15 pid发送信号给java程序,这样就会通过Runtime.getRuntime()执行钩子线程,通过注册的钩子线程调用RabbitListenerEndpointRegistry提供的stop方法。本例在Application的main方法中,注册钩子线程。完成方法如下:

public static void main(String[] args) {
		ConfigurableApplicationContext applicationContext = SpringApplication.run(Application.class, args);
		//停止前,先断开rabbit,保证业务执行完毕后停止
		Runtime.getRuntime().addShutdownHook(new Thread() {
			public void run() {
				try {
					RabbitListenerEndpointRegistry rabbitListenerEndpointRegistry = applicationContext.getBean(
			        RabbitListenerConfigUtils.RABBIT_LISTENER_ENDPOINT_REGISTRY_BEAN_NAME,RabbitListenerEndpointRegistry.class);
					rabbitListenerEndpointRegistry.stop();
					log.info("kill -15 主动结束");
					Thread.sleep(20000);
					log.info("结束完毕");
				} catch (Throwable e) {
					e.printStackTrace();
				}
			}
		});
	}
3、手动启动监听

需要配置autoStartup:

@RabbitListener(queues = "${queue}",autoStartup= "false",id = "123")

可以根据id启动,也可以启动所有:

Collection containers = rabbitListenerEndpointRegistry.getListenerContainers();
if(containers != null && containers.size() > 0) {
	for(MessageListenerContainer container:containers) {
		if(!container.isRunning()){
			container.start();
			log.info("rabbit开启容器");
		}
	}
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/866895.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号