消息队列学习笔记一:ActiveMQ消息队列的动态生成

原文链接: http://www.freesion.com/article/512039881/

消息队列学习笔记一:ActiveMQ消息队列的动态生成

文章目录

        • 消息队列学习笔记一:ActiveMQ消息队列的动态生成
          • 处理步骤
          • 源码
          • 参考文档

处理步骤
  1. 建立服务接口(并生成实现类)
  2. 创建连接工厂
//创建连接工厂
ActiveMQConnectionFactory connFactory = new ActiveMQConnectionFactory(
    ActiveMQConnection.DEFAULT_USER,
    ActiveMQConnection.DEFAULT_PASSWORD,
    "tcp://localhost:61616");
  1. 设置线程池的大小
connFactory.setMaxThreadPoolSize(1);//线程池数量最大为1
  1. 创建连接()
Connection conn = connFactory.createConnection();//连接到JMS消息队列
  1. 启动连接
conn.start();
  1. 开启事务,用于自动确认消息。
Session session=conn.createSession(true,Session.AUTO_ACKNOWLEDGE);
  1. 创建队列,也就是消息的目的地
Destination destination = session.createTopic(msg2);
  1. 创建消息的生产者(这些都是事务操作,都要有session对象来创建)
MessageProducer producer = session.createProducer(destination);
//producer.setDeliveryMode(DeliveryMode.PERSISTENT); //持久化
  1. 接收各种消息
////文本消息
//TextMessage textMessage = session.createTextMessage("这是文本消息");
//producer.send(textMessage);

//键值对消息
MapMessage mapMessage = session.createMapMessage();
mapMessage.setString("reqDesc", msg);
producer.send(mapMessage);
//
////流消息
//StreamMessage streamMessage = session.createStreamMessage();
//streamMessage.writeString("这是流消息");
//producer.send(streamMessage);
//
////字节消息
//String s = "BytesMessage字节消息";
//BytesMessage bytesMessage = session.createBytesMessage();
//bytesMessage.writeBytes(s.getBytes());
//producer.send(bytesMessage);
//
////对象消息
//User user = new User("obj_info", "对象消息"); //User对象必须实现Serializable接口
//ObjectMessage objectMessage = session.createObjectMessage();
//objectMessage.setObject(user);
//producer.send(objectMessage);
  1. 将接收的消息写入消息队列
session.commit(); //提交会话,该条消息会进入"queue"队列,生产者也完成了历史使命
producer.close();
session.close();
conn.close();
//在事务性会话中,只有commit之后,消息才会真正到达目的地
源码
package com.hnxlh.services.impl;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.stereotype.Service;

import javax.jms.*;

/**
 * @Description:动态实现消息队列的创建
 * @Author: 张开帆
 * @Date: 2019/10/18 11:21
 */
@Service
public class Topic_Producer {

    public void sendMessage(String msg,String msg2){
        try {
            //创建连接工厂
            ActiveMQConnectionFactory connFactory = new ActiveMQConnectionFactory(
                ActiveMQConnection.DEFAULT_USER,
                ActiveMQConnection.DEFAULT_PASSWORD,
                "tcp://localhost:61616");
            connFactory.setMaxThreadPoolSize(11);
            //连接到JMS提供者
            Connection conn = connFactory.createConnection();
            //            conn.setClientID("producer1");
            conn.start();

            //事务性会话,自动确认消息
            Session session = conn.createSession(true, Session.AUTO_ACKNOWLEDGE);
            //消息的目的地
            Destination destination = session.createTopic(msg2);
            //消息生产者


            MessageProducer producer = session.createProducer(destination);
            //            producer.setDeliveryMode(DeliveryMode.PERSISTENT); //持久化


            //           //文本消息
            //          TextMessage textMessage = session.createTextMessage("这是文本消息");
            //          producer.send(textMessage);

            //键值对消息
            MapMessage mapMessage = session.createMapMessage();
            mapMessage.setString("reqDesc", msg);
            producer.send(mapMessage);
            //
            //            //流消息
            //            StreamMessage streamMessage = session.createStreamMessage();
            //            streamMessage.writeString("这是流消息");
            //            producer.send(streamMessage);
            //
            //            //字节消息
            //            String s = "BytesMessage字节消息";
            //            BytesMessage bytesMessage = session.createBytesMessage();
            //            bytesMessage.writeBytes(s.getBytes());
            //            producer.send(bytesMessage);
            //
            //            //对象消息
            //            User user = new User("obj_info", "对象消息"); //User对象必须实现Serializable接口
            //            ObjectMessage objectMessage = session.createObjectMessage();
            //            objectMessage.setObject(user);
            //            producer.send(objectMessage);


            session.commit(); //提交会话,该条消息会进入"queue"队列,生产者也完成了历史使命
            producer.close();
            session.close();
            conn.close();
            //在事务性会话中,只有commit之后,消息才会真正到达目的地

        }catch (Exception e){
            e.printStackTrace();

        }

    }
}
参考文档

参考文档

你可能感兴趣的:(消息队列学习笔记)