消息队列学习笔记一:ActiveMQ消息队列的动态生成
处理步骤
- 建立服务接口(并生成实现类)
- 创建连接工厂
//创建连接工厂
ActiveMQConnectionFactory connFactory = new ActiveMQConnectionFactory(
ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD,
"tcp://localhost:61616");
- 设置线程池的大小
connFactory.setMaxThreadPoolSize(1);//线程池数量最大为1
- 创建连接()
Connection conn = connFactory.createConnection();//连接到JMS消息队列
- 启动连接
conn.start();
- 开启事务,用于自动确认消息。
Session session=conn.createSession(true,Session.AUTO_ACKNOWLEDGE);
- 创建队列,也就是消息的目的地
Destination destination = session.createTopic(msg2);
- 创建消息的生产者(这些都是事务操作,都要有session对象来创建)
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之后,消息才会真正到达目的地
源码
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(1,1);
//连接到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();
}
}
}