private void shutdownMq(ContextClosedEvent event) {
Map<String, RocketMqListenerContainer> rocketMqListenerContainers = event.getApplicationContext().getBeansOfType(RocketMqListenerContainer.class);
if (!CollectionUtils.isEmpty(rocketMqListenerContainers)) {
for (RocketMqListenerContainer container : rocketMqListenerContainers.values()) {
container.destroy();
}
}
Map<String, DefaultMQProducer> mqTemplateMap = event.getApplicationContext().getBeansOfType(DefaultMQProducer.class);
if (!CollectionUtils.isEmpty(mqTemplateMap)) {
for (DefaultMQProducer template : mqTemplateMap.values()) {
template.shutdown();
}
}
}
需要注意的是mq的producer和consumer的关闭顺序需要根据实际的数据流向来控制。