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<ContextRefreshedEvent> {
|
|
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractMessageQueue.class);
|
|
private ApplicationContext applicationContext;
|
|
/**
|
* 注册消息处理器
|
*/
|
private Map<String, MessageHandler> registerJmsHandler = Collections.emptyMap();
|
|
@Override
|
public void onApplicationEvent(ContextRefreshedEvent event) {
|
if (event.getApplicationContext().getParent() == null) {
|
LOGGER.debug("准备加载MessageHandler实现");
|
this.applicationContext = event.getApplicationContext();
|
Map<String, MessageHandler> jmsHandlerMap = applicationContext.getBeansOfType(MessageHandler.class);
|
LOGGER.debug("加载MessageHandler实现共{}条", jmsHandlerMap.size());
|
|
if (MapUtil.isNotEmpty(jmsHandlerMap)) {
|
Collection<MessageHandler> 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);
|
}
|
}
|