• ActiveMQ消息队列用法


    pom.xml文件如下:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.zainagou</groupId>
      <artifactId>zng_activemq</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      
      <dependencies>
    <!-- activemq 相关maven依赖 -->
            <dependency>
                <groupId>javax.jms</groupId>
                <artifactId>jms</artifactId>
                <version>1.1</version>
            </dependency>
            <dependency>
                <groupId>org.apache.activemq</groupId>
                <artifactId>activemq-core</artifactId>
                <version>5.5.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.activemq</groupId>
                <artifactId>activemq-pool</artifactId>
                <version>5.7.0</version>
            </dependency>
    
    <!-- 日志相关依赖 -->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.6.1</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>1.6.1</version>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.16</version>
            </dependency>
        </dependencies>
    </project>

    生产者:

    package com.zainagou.client;
    
    import javax.jms.Connection;
    import javax.jms.ConnectionFactory;
    import javax.jms.Destination;
    import javax.jms.JMSException;
    import javax.jms.Message;
    import javax.jms.MessageProducer;
    import javax.jms.Session;
    
    import org.apache.activemq.ActiveMQConnection;
    import org.apache.activemq.ActiveMQConnectionFactory;
    import org.slf4j.Logger;
    
    public class Producer {
    
        private static final Logger logger = org.slf4j.LoggerFactory.getLogger(Producer.class);
        private static final String brokerURL = ActiveMQConnection.DEFAULT_BROKER_URL;
        private static final String queueName = "testqueue";
        
        public static void main(String[] args) throws JMSException, InterruptedException {
            //初始化connectionFactory
            ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerURL);
            //创建链接
            Connection connection = connectionFactory.createConnection();
            //启动链接
            connection.start();
            //创建会话 第一个参数表示是否使用事务如果为true,只有在调用session.commit()时才能提交消息到队列,消费者才能接受
            Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
            //创建队列
            Destination destination = session.createQueue(queueName);
            //创建生产者
            MessageProducer producer = session.createProducer(destination);
            //创建消息
            StringBuffer buffer = null;
            for(int i = 0; i<=15; i++){
                Thread.sleep(3000);
                buffer = new StringBuffer();
                buffer.append("欢迎使用ActiveMQ");
                buffer.append(i);
                logger.info(buffer.toString());
                Message message = session.createTextMessage(buffer.toString());
                producer.send(message);
            }
            //使用事务是提交事务或回滚事务
            session.commit();
            //session.rollback();
            connection.close();
        }
    }

    消费者:

    package com.zainagou.client;
    
    import javax.jms.Connection;
    import javax.jms.ConnectionFactory;
    import javax.jms.Destination;
    import javax.jms.JMSException;
    import javax.jms.Message;
    import javax.jms.MessageConsumer;
    import javax.jms.MessageListener;
    import javax.jms.Session;
    import javax.jms.TextMessage;
    
    import org.apache.activemq.ActiveMQConnection;
    import org.apache.activemq.ActiveMQConnectionFactory;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    public class Consumer implements MessageListener {
    
        private static final Logger logger = LoggerFactory.getLogger(Consumer.class);
        private static final String brokerURL = ActiveMQConnection.DEFAULT_BROKER_URL;
        private static final String queueName = "testqueue";
        
        public static void main(String[] args) throws JMSException {
            //创建ConnectionFactory
            ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerURL);
            //创建connection
            Connection connection = connectionFactory.createConnection();
            //打开connection
            connection.start();
            //创建会话
            Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
            //创建会话目标
            Destination  dest = session.createQueue(queueName);
            //根据会话目标创建消费者
            MessageConsumer consumer = session.createConsumer(dest);
            //初始化MessageListener
            Consumer sumer = new Consumer();
            //给消费者设置监听对象
            consumer.setMessageListener(sumer);
        }
    
        @Override
        public void onMessage(Message message) {
            try {
                logger.info("接受消息:"+((TextMessage)message).getText());
            } catch (JMSException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
        }
    }
  • 相关阅读:
    解决:Android 8.0检测不到当前的activity
    flask学习(十三):过滤器
    打开相册上传图片
    完整的项目
    解决ScrollView滑动RecyclerView的卡顿
    RxJava
    CoordinatorLayout
    NestedScrollView,RecyclerView
    ViewPageIndicator
    RxJava的实现原理
  • 原文地址:https://www.cnblogs.com/boblogsbo/p/5718159.html
Copyright © 2020-2023  润新知