package com.artfess.application.jms;
import com.artfess.activemq.model.JmsMessage;
import com.artfess.base.context.BaseContext;
import com.artfess.base.jms.Notice;
import com.artfess.base.util.BeanUtils;
import com.artfess.base.util.StringUtil;
import com.artfess.application.persistence.manager.SysMessageManager;
import com.artfess.application.service.TemplateService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jms.annotation.JmsListener;
import javax.annotation.Resource;
import javax.jms.JMSException;
import javax.jms.ObjectMessage;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
* 描述:消息消费者
* @author zhaoxy
* @company 广州宏天软件股份有限公司
* @email zhxy@jee-soft.cn
* @date 2018-06-06 14:23
*
*/
public class JmsMessageConsumer {
private static final Logger logger = LoggerFactory.getLogger(JmsMessageConsumer.class);
private Map jmsHandlerMap = new HashMap();
@Resource
TemplateService templateService;
@Resource
BaseContext baseContext;
public void setJmsHandList(List jmsHandList){
for(JmsHandler handler:jmsHandList){
jmsHandlerMap.put(handler.getType(), handler);
}
}
@JmsListener(destination = "${jms.queue.name:eipQueue}", containerFactory="jmsListenerContainerQueue")
public void receiveQueue(Object model) {
logger.debug("[JMS]: Queue message is :"+model.getClass().getName()+"---"+model);
handlerJmsMessage(model);
}
private void handlerJmsMessage(Object source) {
if(BeanUtils.isEmpty(source)) return;
if(source instanceof ObjectMessage){
ObjectMessage objectMessage = (ObjectMessage)source;
try {
Serializable object = objectMessage.getObject();
if(BeanUtils.isEmpty(object)) return;
if(object instanceof JmsMessage) {
JmsMessage jmsMessage = (JmsMessage)object;
if(StringUtil.isNotEmpty(jmsMessage.getTenantId())) {
baseContext.setTempTenantId(jmsMessage.getTenantId());
}
JmsHandler jmsHandler = jmsHandlerMap.get(jmsMessage.getType());
jmsHandler.send(jmsMessage);
}
if(object instanceof Notice) {
Notice notice = (Notice)object;
if(StringUtil.isNotEmpty(notice.getTenantId())) {
baseContext.setTempTenantId(notice.getTenantId());
}
templateService.sendNotice(notice);
}
} catch (JMSException e) {
logger.error(e.getMessage());
}
}
}
}