package com.zt.common.message.consumer; import cn.hutool.core.map.MapUtil; import com.alibaba.fastjson.JSON; import com.zt.common.message.handler.MessageHandler; import com.zt.common.message.model.Message; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Map; /** * 抽象公共消息队列 * * @author wacxhs */ public abstract class AbstractMessageQueue implements ApplicationListener { private static final Logger LOGGER = LoggerFactory.getLogger(AbstractMessageQueue.class); private ApplicationContext applicationContext; /** * 注册消息处理器 */ private Map registerJmsHandler = Collections.emptyMap(); @Override public void onApplicationEvent(ContextRefreshedEvent event) { if (event.getApplicationContext().getParent() == null) { LOGGER.debug("准备加载MessageHandler实现"); this.applicationContext = event.getApplicationContext(); Map jmsHandlerMap = applicationContext.getBeansOfType(MessageHandler.class); LOGGER.debug("加载MessageHandler实现共{}条", jmsHandlerMap.size()); if (MapUtil.isNotEmpty(jmsHandlerMap)) { Collection jmsHandlers = jmsHandlerMap.values(); this.registerJmsHandler = new HashMap<>(jmsHandlers.size(), 1); for (MessageHandler jmsHandler : jmsHandlers) { this.registerJmsHandler.put(jmsHandler.getType().getKey(), jmsHandler); } } containerInitialCompleteAfter(); } } /** * 容器初始化完成后 */ protected void containerInitialCompleteAfter() { } protected ApplicationContext getApplicationContext() { return applicationContext; } /** * 发送消息 * * @param message * 消息传输对象 */ @SuppressWarnings("unchecked") public void handleMessage(Message message) { MessageHandler handler = getJmsHandler(message.getType()); if (handler == null) { LOGGER.warn("未找到({})消息处理器", message.getType()); return; } try { handler.handlerMessage(message); } catch (Exception e) { LOGGER.error("处理消息({})出错, 参数入参:{}", message.getType(), JSON.toJSONString(message), e); } } /** * 获取消息处理实现 * * @return 消息处理实现 */ protected MessageHandler getJmsHandler(String type) { return this.registerJmsHandler.get(type); } }