ActiveMQ
2021-08-20 09:29:17 16 举报
AI智能生成
ActiveMQ技术路线
作者其他创作
大纲/内容
基础
Destination(消息类型)
Queue
一对一
Topic
一对多
api发送和接收
生产者
producer.send(message);
消费者
同步阻塞
consumer.receive();
异步非阻塞
consumer.setMessageListener();
消息
消息头
message.setJMSDeliveryMode
是否持久化
message.setJMSExpiration
设置过期时间,默认永不过期
message.setJMSPriority
设置优先级
默认4
message.setJMSMessageID
设置消息的标识
message.setJMSDestination
单独设置消息发送目的地
消息体
封装具体的消息数据
5种消息体
TextMessage
MapMessage
StreamMessage
BytesMessage
ObjectMessage
发送和接收的消息体要相同
消息属性
额外的附加信息
message.setXxxProperty
高可用性
持久化
基础API
持久化
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
非持久化
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
Queue
默认持久化
Topic
先运行消费者,在MQ注册成功后,即时离线,下次在线时也能消费消息
事务
事务偏生产者
生产者
开启事务后,session不提交,消息不入队
消费者
开启事务后,session不提交,消息不出队
可以多次重复消费消息
签收
签收偏消费者
关闭事务
自动签收
Session.AUTO_ACKNOWLEDGE
默认
手动签收
Session.CLIENT_ACKNOWLEDGE
message.acknowledge();
开启事务
session提交,则消息自动签收
签不签收不影响
SpringBoot整合
maven依赖
配置文件
生产者
声明队列
声明主题
发送消息
jmsMessagingTemplate.convertAndSend(queue, "message");
消费者
监听消息
@JmsListener(destination = "name")
spring.jms.pub-sub-domain
true 把name当成Topic处理
false 把name当成Queue处理
默认
当需要支持两种模式时
去掉 spring.jms.pub-sub-domain 配置
Queue 监听不变
相当于取默认值
Topic 监听增加自定义监听工厂
协议
tcp
目前主要及默认协议
nio
性能更好
其他
amqp
stomp
ssl
mqtt
ws
持久化
AMQ Message Store
5.3版本之前默认方式,保存到文件
KahnDB
5.4之后默认方式
db-*.log
数据存储文件,32M一个文件
db.data
Btree的索引
db.redo
进行消息恢复
db.free
当前db.data文件里哪些页面是空闲的
lock
锁文件
LevelDB
性能更好
尚不完善
MySQL
配置文件中配置数据库连接
createTableOnStartup
ActiveMQ启动时自动建表
三张表
ACTIVEMQ_MSGS
消息表
Queue消费之后被删除
Topic消费后还在
ACTIVEMQ_ACKS
订阅关系表
ACTIVEMQ_LOCK
集群环境下记录master
ActiveMQ journal
先保存到日志,如果消费者消费较慢,则批量写入数据库
集群
实现
ZooKeeper
Replicated LevelDB
延迟发送/定时投递
签收机制
0 条评论
下一页