• 创建Springboot工程接收acticemq消息


    1、JMSFactory配置

    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
        xmlns:mongo="http://www.springframework.org/schema/data/mongo"
        xmlns:jms="http://www.springframework.org/schema/jms"
        xsi:schemaLocation="http://www.springframework.org/schema/context
              http://www.springframework.org/schema/context/spring-context.xsd
              http://www.springframework.org/schema/data/mongo
              http://www.springframework.org/schema/data/mongo/spring-mongo.xsd
              http://www.springframework.org/schema/beans
              http://www.springframework.org/schema/beans/spring-beans.xsd
              http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsd">
    
        <context:annotation-config />
    
        <!-- a pooling based JMS provider -->
        <bean id="pooledJmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory"
            destroy-method="stop" primary="true">
            <property name="connectionFactory" ref="jmsFactory" />
        </bean>
    
        <!-- JMS provider -->
        <bean id="jmsFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
            <property name="brokerURL"
                value="${jms.server.brokerURL:tcp://localhost:61616}" />
        </bean>
    </beans>

    2、启动类注入:

    public class MqReceiverApplication {
    
        public static void main(String[] args) throws IOException {
            System.setProperty("java.util.logging.config.file", ".");
    
            SpringApplication.run(MqReceiverApplication.class, args);
        }
    
        @Configuration
        @ConditionalOnMissingBean(name = "jmsFactory")
        @ImportResource(locations = { "classpath:com/mq/reciver/jms.xml" })
        static class JmsConfig {
        }
    
        @Bean
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }
    
    }

    3、接收类:

    import javax.jms.ConnectionFactory;
    import javax.jms.Destination;
    import javax.jms.JMSException;
    import javax.jms.MessageListener;
    import javax.jms.Session;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.InitializingBean;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.context.ApplicationListener;
    import org.springframework.context.event.ContextClosedEvent;
    import org.springframework.jms.listener.DefaultMessageListenerContainer;
    import org.springframework.jms.support.destination.DestinationResolver;
    
    
    public abstract class AbstractJmsReceiver
            implements InitializingBean, ApplicationListener<ContextClosedEvent>, DestinationResolver, MessageListener {
    
        private static final Logger logger = LoggerFactory.getLogger(AbstractJmsReceiver.class);
    
        @Autowired(required = true)
        @Qualifier("jmsFactory")
        private ConnectionFactory _connectionFactory;
    
        private DefaultMessageListenerContainer _containerActivity;
    
        @Override
        public void onApplicationEvent(ContextClosedEvent event) {
            if (_containerActivity != null && _containerActivity.isActive()) {
                _containerActivity.shutdown();
            }
        }
    
        @Override
        public void afterPropertiesSet() throws Exception {
            if (this.isEnable()) {
                logger.debug("开始监听任务状态消息队列【{}】", this.getDestinationName());
                _containerActivity = new DefaultMessageListenerContainer();
                _containerActivity.setPubSubDomain(this.getPubSubDomain());// 默认点对点
                _containerActivity.setMessageListener(this);
                _containerActivity.setConnectionFactory(_connectionFactory);
                _containerActivity.setDestinationName(this.getDestinationName());
                _containerActivity.setConcurrency("1");
                _containerActivity.setDestinationResolver(this);
                _containerActivity.initialize();
                _containerActivity.start();
            }
        }
    
        @Override
        public Destination resolveDestinationName(Session session, String destinationName, boolean pubSubDomain)
                throws JMSException {
            return (pubSubDomain ? session.createTopic(destinationName) : session.createQueue(destinationName));
        }
    
        public abstract String getDestinationName();
    
        public abstract boolean getPubSubDomain();
    
        public abstract boolean isEnable();
    }
    package com.mq.reciver.activemq;
    
    import javax.jms.JMSException;
    import javax.jms.Message;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    import org.springframework.util.StringUtils;
    
    @Component
    public class TopicReceiver extends AbstractJmsReceiver {
        
        @Value("${topic.name:topic}")
        private String topicName;
    
        @Override
        public void onMessage(Message message) {
            try {
                String moId = message.getStringProperty("objId");
                String type = message.getStringProperty("type");
                String extraDataStr = message.getStringProperty("extraData");
                String operation = message.getStringProperty("operation");
                String operatorId = message.getStringProperty("operatorId");
                logger.debug("{} {} {} {} {}", operatorId, operation, type, moId, extraDataStr);
                if ("Delete".equals(operation)) {
    
                } else if ("Add".equals(operation)) {
    
                } else if ("Modify".equals(operation)) {
    
                }
            } catch (JMSException e) {
                e.printStackTrace();
            }
        }
    
        @Override
        public String getDestinationName() {
            return topicName;
        }
    
        @Override
        public boolean getPubSubDomain() {
            return true;
        }
    
        @Override
        public boolean isEnable() {
            if (!StringUtils.isEmpty(topicName)) {
                return true;
            }
            return false;
        }
    
    }
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.jms.JMSException;
    import javax.jms.Message;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    
    /**
     * 处理状态变化的JMS Message通知,
     * 
     */
    @Component
    public class QueueReceiver extends AbstractJmsReceiver {
    
        
    
        @Value("${agent.enableReceiver:false}")
        private boolean enable = false;
    
        private List<AbstractMqProcessor> workProcessors = new ArrayList<>();
    
        public void addWorkProcessor(AbstractMqProcessor processor) {
            if (enable) {
                this.workProcessors.add(processor);
            }
        }
    
        @Override
        public void onMessage(Message message) {
            try {
                System.out.println(message.getPropertyNames());
                for (AbstractMqProcessor processor : workItemProcessors) {
                    if (!processor.getDefName().equals("")) {
                        logger.debug("接收到新任务【{}】消息", processor.getDefName());
                        processor.process();
                    }
                }
            } catch (JMSException e) {
                logger.warn("[{}]处理接收到的消息发生错误", this.getClass().getSimpleName(), e);
            } catch (Throwable e) {
                logger.warn("[{}]处理接收到的消息发生错误", this.getClass().getSimpleName(), e);
            }
        }
    
        @Override
        public String getDestinationName() {
            return "Queue.J.test";
        }
    
        @Override
        public boolean getPubSubDomain() {
            return false;
        }
    
        @Override
        public boolean isEnable() {
            return enable;
        }
    }
  • 相关阅读:
    MS SQL入门基础:SQL数据库中的事务
    MS SQL入门基础:删除数据
    MS SQL入门基础:触发器的高级应用
    MS SQL入门基础:SQL Server 安全性管理的途径
    MS SQL入门基础:权限管理
    MS SQL入门基础:打开游标
    MS SQL入门基础:数据库更新添加数据
    MS SQL入门基础:游标、游标的优点和种类
    MS SQL入门基础:创建和管理视图
    MS SQL入门基础:数据库中的连接查询
  • 原文地址:https://www.cnblogs.com/liangblog/p/15334371.html
Copyright © 2020-2023  润新知