ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

消息消费者和生产者

2021-04-24 19:00:10  阅读:175  来源: 互联网

标签:消费者 生产者 connection session static 消息 textMessage public String


消费者

package org.example;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;
import java.io.IOException;

/**
 * @author yyh
 * @create 2021-04-23 20:27
 */
public class JmsConsumer {
    public static final String ACTIVEMQ_URL = "tcp://192.168.43.128:61616";
    public static final String QUEUE_NAME = "queue01";

    public static void main(String[] args) throws JMSException, IOException {
        System.out.println("我是2号");
        //1 创建连接工程
        ActiveMQConnectionFactory activeMQConnection = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
        //2 通过连接工程 获得连接connection并启动访问
        Connection connection = activeMQConnection.createConnection();
        connection.start();
        //3创建session会话 2个参数 事务 签收
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //4创建目的地(队列或主题)
        Queue queue = session.createQueue(QUEUE_NAME);
        //5 创建消息消费者
        MessageConsumer consumer = session.createConsumer(queue);
     /* //同步阻塞
     订阅者或接收者调用messageCosumer的receive方法来接收消息,receive在接收消息之前或者超时之前一直阻塞
     while (true) {
            TextMessage textMessage = (TextMessage) consumer.receive(4000L);
            if (null != textMessage) {
                System.out.println("消费者接收消息:" + textMessage.getText());
            } else {
                break;
            }

        }*/
     //2 通过消息的监听 来消费消息
        //异步非阻塞方式
        /*订阅者或接收者通过messageConsumer的setMessageListener注册一个消息监听器
        当消息到达之后,系统自动调用监听器MessageListener的onMessage(Message message)方法
        * */
        consumer.setMessageListener(new MessageListener() {
            @Override
            public void onMessage(Message message) {
                if(null!=message&&message instanceof TextMessage){
                    TextMessage textMessage= (TextMessage) message;
                    try {
                        System.out.println(textMessage.getText());
                    } catch (JMSException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
        System.in.read(); //保证控制台不灭
        //1 先生产 启动1号消费者消费 在启动二号消费者消费 2号还能消费吗
        //1号可以消费
        //2号不可以消费
        //2 先启动2个消费者  在生产
        //2.1 两个消费者都有6条
        //2.2 先到先消费
        //2.3 一人一半  y

        consumer.close();
        session.close();
        connection.close();

    }
}

生产者

package org.example;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * Hello world!
 *
 */
public class JmsProduce
{
        public static final String ACTIVEMQ_URL="tcp://192.168.43.128:61616";
        public static final String QUEUE_NAME="queue01";
    public static void main( String[] args ) throws JMSException {
        //1 创建连接工程
        ActiveMQConnectionFactory activeMQConnection=new ActiveMQConnectionFactory(ACTIVEMQ_URL);
        //2 通过连接工程 获得连接connection并启动访问
        Connection connection = activeMQConnection.createConnection();
        connection.start();
        //3创建session会话 2个参数 事务 签收
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //4创建目的地(队列或主题)
        Queue queue= session.createQueue(QUEUE_NAME);
         //5 创建消息生产者
        MessageProducer messageProducer = session.createProducer(queue);
        // 6通过消息生产者生产三条消息
        for(int i=0;i<3;i++){
            //7 创建消息      
            TextMessage textMessage = session.createTextMessage("msg--" + i);
            //8通过messageproducer发送给MQ
             messageProducer.send(textMessage);
        }
        //9关闭资源
       messageProducer.close();
        session.close();
        connection.close();
        //消息发布到MQ完成
        System.out.println("完成");
    }
}

标签:消费者,生产者,connection,session,static,消息,textMessage,public,String
来源: https://blog.csdn.net/qq_43338663/article/details/116099735

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有