ActiveMQ
1、简介
解耦、异步、削峰
分布式系统
只要消息发送,尽量异步
只要解耦,尽量引入消息中间件
2、编码
JMS编码架构
原生API:
生产者:
连接工厂——获取连接——创建会话session
创建目的地(队列、主题)——创建消息生产者
消息生产者发送消息
(1)创建消息
(2)通过生产者发送
关闭资源(倒序:生产者、session、连接)
消费者:
连接工厂——获取连接——创建会话session
创建目的地(队列、主题)——创建消息消费者
消费生产者接收消息——接收消息(一直型、定时型)、消息类型要一致
关闭资源(倒序:消费者、session、连接)
1、receive
2、监听
队列同时监听:轮询
主题:先订阅再有生产消息
3、JMS
JavaEE
JMS:java消息服务
消息头
消息体
消息属性
可靠性:持久化、事务、签收、集群
4、Broker
5、spring boot整合
间隔定投
注解监听
6、传输协议
种类
NIO + 多协议
7、消息存储和持久化
AMQ
KahaDB:事务日志 + 索引文件
Db.log:存储消息、Db.data:B树索引、Lock:文件锁
LevelDB:基于文件的本地数据库:redis aof
JDBC + Mysql:
建库,自动建表:消息表、订阅关系表、记录master表
JDBC With Journal:
存到高速缓存日志,减少数据库压力
8、多节点集群
Zookeeper和Replicated LevelDB集群
原理:对外暴露master
主从复制 + Zookeeper集群
已被舍弃
9、高级特性、面试考点
异步投递:
发送是否成功:写回调函数:成功、失败的信息
延时投递和定时投递:消息头属性中设置
分发策略
消息重试机制:消息侧回滚、消费侧没有commit等
有毒消息:重发超过6次,放到DLQ(死信队列)
死信队列:查看出错消息,人工干预修复,可自定义
防止重复调用,幂等性:数据库主键、redis key
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 gca的博客!
评论