1、简介

image-20220124221656632

解耦、异步、削峰

分布式系统

只要消息发送,尽量异步

只要解耦,尽量引入消息中间件

2、编码

JMS编码架构

image-20220124221810182

原生API:

生产者:

连接工厂——获取连接——创建会话session

创建目的地(队列、主题)——创建消息生产者

消息生产者发送消息

(1)创建消息

(2)通过生产者发送

关闭资源(倒序:生产者、session、连接)

消费者:

连接工厂——获取连接——创建会话session

创建目的地(队列、主题)——创建消息消费者

消费生产者接收消息——接收消息(一直型、定时型)、消息类型要一致

关闭资源(倒序:消费者、session、连接)

1、receive

2、监听

队列同时监听:轮询

主题:先订阅再有生产消息

3、JMS

JavaEE

image-20220124222038405

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集群

已被舍弃

image-20220124222731107

9、高级特性、面试考点

异步投递:

发送是否成功:写回调函数:成功、失败的信息

延时投递和定时投递:消息头属性中设置

分发策略

消息重试机制:消息侧回滚、消费侧没有commit等

有毒消息:重发超过6次,放到DLQ(死信队列)

死信队列:查看出错消息,人工干预修复,可自定义

防止重复调用,幂等性:数据库主键、redis key