package com.artfess.activemq.producer; import com.artfess.activemq.model.JmsMessage; import com.artfess.base.context.BaseContext; import com.artfess.base.jms.JmsProducer; import com.artfess.base.jms.Notice; import org.apache.activemq.command.ActiveMQQueue; import org.apache.activemq.command.ActiveMQTopic; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Primary; import org.springframework.jms.core.JmsMessagingTemplate; import org.springframework.stereotype.Service; import javax.annotation.Resource; import javax.jms.Queue; import javax.jms.QueueSession; import javax.jms.Topic; /** * jms生产者的activeMQ实现 * @author zhaoxy * @company 广州宏天软件股份有限公司 * @email zhxy@jee-soft.cn * @date 2018-06-06 14:20 */ @Primary @Service @ConditionalOnProperty(value="jms.enable", matchIfMissing = true) public class DefaultJmsProducer implements JmsProducer{ private static final Log logger= LogFactory.getLog(DefaultJmsProducer.class); @Resource private Queue queue; @Resource private Topic topic; @Resource JmsMessagingTemplate jmsMessagingTemplate; @Resource BaseContext baseContext; QueueSession session = null; public void sendToQueue(Object object) { if(object instanceof Notice) { Notice notice = (Notice)object; notice.setTenantId(baseContext.getCurrentTenantId()); jmsMessagingTemplate.convertAndSend(queue, notice); }else if(object instanceof JmsMessage){ JmsMessage jmsMessage = (JmsMessage)object; jmsMessage.setTenantId(baseContext.getCurrentTenantId()); jmsMessagingTemplate.convertAndSend(queue, jmsMessage); }else { jmsMessagingTemplate.convertAndSend(queue, object); } logger.debug("[JMS]: Send to queue."); } @Override public void sendToTopic(Object object) { if(object instanceof Notice) { Notice notice = (Notice)object; notice.setTenantId(baseContext.getCurrentTenantId()); jmsMessagingTemplate.convertAndSend(topic, notice); }else if(object instanceof JmsMessage){ JmsMessage jmsMessage = (JmsMessage)object; jmsMessage.setTenantId(baseContext.getCurrentTenantId()); jmsMessagingTemplate.convertAndSend(topic, jmsMessage); }else { jmsMessagingTemplate.convertAndSend(topic, object); } logger.debug("[JMS]: send to topic."); } @Override public void sendToQueue(Object object, String queueName) { Queue bnsQueue = getQueue(queueName); if(object instanceof Notice) { Notice notice = (Notice)object; notice.setTenantId(baseContext.getCurrentTenantId()); jmsMessagingTemplate.convertAndSend(bnsQueue, notice); }else if(object instanceof JmsMessage){ JmsMessage jmsMessage = (JmsMessage)object; jmsMessage.setTenantId(baseContext.getCurrentTenantId()); jmsMessagingTemplate.convertAndSend(bnsQueue, jmsMessage); }else{ jmsMessagingTemplate.convertAndSend(bnsQueue, object); } logger.debug("[JMS]: Send to queue:"+queueName); } @Override public void sendToTopic(Object object, String topicName) { Topic bnsTopic = getTopic(topicName); if(object instanceof Notice) { Notice notice = (Notice)object; notice.setTenantId(baseContext.getCurrentTenantId()); jmsMessagingTemplate.convertAndSend(bnsTopic, notice); }else if(object instanceof JmsMessage){ JmsMessage jmsMessage = (JmsMessage)object; jmsMessage.setTenantId(baseContext.getCurrentTenantId()); jmsMessagingTemplate.convertAndSend(bnsTopic, jmsMessage); }else { jmsMessagingTemplate.convertAndSend(bnsTopic, object); } logger.debug("[JMS]: send to topic:"+topicName); } private Queue getQueue(String queueName){ Queue bnsQueue = new ActiveMQQueue(queueName); return bnsQueue; } private Topic getTopic(String topicName){ Topic bnsTopic = new ActiveMQTopic(topicName); return bnsTopic; } }