activemq笔记
官网
端口
- 61616
- 8161
操作
sh
# 启动
start
# 停止
stop
# 查看端口占用
lsof -i:61616
netstat -app|grep 61616
# 查看进程
ps -ef | grep activemq | grep -v grep基本步骤
图解
queue
生产者
java
//创建工厂
ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://192.168.111.128:61616");
//创建链接
Connection connection = factory.createConnection();
//启动链接
connection.start();
//创建session,第一个参数为是否开启事务,第二个参数为确认机制
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
//创建目标地址(Queue:点对点消息,Topic:发布订阅消息)注意,生产者和消费者这里得一样
Queue queue = session.createQueue("queue01");
//创建消息生产者
MessageProducer producer = session.createProducer(queue);
//创建消息
TextMessage textMessage = session.createTextMessage("test message");
//发送消息
producer.send(textMessage);
//释放资源
session.close();
connection.close();消费者
java
//创建工厂
ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://192.168.111.128:61616");
//创建链接
Connection connection = factory.createConnection();
//启动链接
connection.start();
//创建session
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
//创建目标地址(Queue:点对点消息,Topic:发布订阅消息)注意,生产者和消费者这里得一样
Queue queue = session.createQueue("queue01");
//创建消息消费者
MessageConsumer consumer = session.createConsumer(queue);
//设置消息监听器来接收消息
consumer.setMessageListener(new MessageListener() {
//处理消息
@Override
public void onMessage(Message message) {
if(message instanceof TextMessage){
TextMessage textMessage = (TextMessage)message
try {
System.out.println("接收的消息(2):"+textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
});
//注意:在监听器的模式下千万不要关闭连接,一旦关闭,消息无法接收topic
生产者
java
//创建工厂
ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://192.168.111.128:61616");
//创建链接
Connection connection = factory.createConnection();
//启动链接
connection.start();
//创建session,第一个参数为是否开启事务,第二个参数为确认机制
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
//创建目标地址(Queue:点对点消息,Topic:发布订阅消息)注意:生产者和消费者这里得一样
Topic topic = session.createTopic("topic01");
//创建消息生产者
MessageProducer producer = session.createProducer(topic);
//创建消息
TextMessage textMessage = session.createTextMessage("test message--topic");
//发送消息
producer.send(textMessage);
//释放资源
session.close();
connection.close();消费者
java
//创建工厂
ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://192.168.111.128:61616");
//创建链接
Connection connection = factory.createConnection();
//启动链接
connection.start();
//创建session
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
//创建目标地址(Queue:点对点消息,Topic:发布订阅消息)注意,生产者和消费者这里得一样
Topic topic = session.createTopic("topic01");
//创建消息消费者
MessageConsumer consumer = session.createConsumer(topic);
//设置消息监听器来接收消息
consumer.setMessageListener(new MessageListener() {
//处理消息
@Override
public void onMessage(Message message) {
if(message instanceof TextMessage){
TextMessage textMessage = (TextMessage)message
try {
System.out.println("接收的消息--topic:"+textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
});注意:一定要先启动消费者,然后再启动生产者,否则消费者无法接收到消费者启动之前的消息
springboot整合
依赖
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>配置项
yml
server:
port: 9001 #端口
spring:
application:
name: activemq-producer # 服务名称
# springboot与activemq整合配置
activemq:
broker-url: tcp://192.168.111.128:61616 # 连接地址
user: admin # activemq用户名
password: admin :# activemq密码
packages:
trust-all: true # 让ActiveMQ信任全部自定义对象,实现对象的序列化或反序列化
# 指定发送模式 (点对点 false , 发布订阅 true)
jms:
pub-sub-domain: false
template:
delivery-mode: persistent # 持久化配置(消息存储在日志文件里面)
# 自己定义目标名称(队列或主题)
activemq:
name: springboot_queue生产者
配置文件

注意
ActiveMQ5.12后 ,为了安全考虑,ActiveMQ默认不接受自定义的序列化对象,需要将自定义的加入到受信任的列表。 
测试类

建议
建议使用jmsTemplate来操作,当然用JmsMessagingTemplate也行
消费者
配置文件

注意
ActiveMQ5.12后 ,为了安全考虑,ActiveMQ默认不接受自定义的序列化对象,需要将自定义的加入到受信任的列表。 
监听类

JMS消息体
TextMessage
一个字符串对象
生产者
消费者
MapMessage
一套名称-值对
生产者
消费者
ObjectMessage
一个序列化的 Java 对象
生产者
消费者
注意
ActiveMQ5.12后 ,为了安全考虑,ActiveMQ默认不接受自定义的序列化对象,需要将自定义的加入到受信任的列表。 
BytesMessage
一个字节的数据流
生产者
消费者
StreamMessage
Java原始值的数据流
生产者
消费者
消息持久化

可以选的配置
上次用的写法
简单的业务
只要求接收和发送topic消息
消费者
用监听注解
配置
生产者

配置
麻烦的业务
需求:需要可以接收和发送queue消息和topic消息
配置文件
配置类
监听类
定时将发送失败的信息取出来发送
borker





















