消息队列原理及activeMQ基本知识点

activeMQ

1) 广义消息队列

a) 消息队列本质:一次rpc变三次;内容存储;合适的时间投递
b) 消息队列设计重点
rpc通信: 协议(http,tcp),序列化(二进制流)
存储: 文件/数据库/内存
消费关系处理: 消息生产者,消息消费者,订阅关系
事务/防丢防重/
批量处理/异步处理(多线程投递消息)
性能: 高效存储等
c) 不同消息队列的特性: 消息堆积能力/丢失概率/减少重复/顺序保证/错峰流控能力/最终一致性/慢消费处理等
d) 基本流程
producer发送消息broker
broker存储消息
broker根据订阅类型(topic/queue)发送给consumer
consumer回复消息确认(各种acknowledge机制)
broker删除消息/备份
a) 关注点
高性能rpc方案(开源rpc框架,netty/mina)
存储方案(文件系统/jdbc/redis)
投递方案(何时从队列中取得消息进行投递,多线程投递模型)
消费关系存储(订阅关系存到公共存储上,如zookeeper)
事务消息: 即二阶段提交的分布式事务;发生在producer和broker之间
i. 转账问题: A账号给B账号转账100元,A和B是不同银行的,采用消息的方式来保证最终一致性,A银行要扣钱更新DB,又要发送消息给broker,如何保证两个操作的原子性?
ii. A先发送一个消息给broker
iii. broker保存成功后返回
iv. A根据返回结果更新DB,如果成功发送confirm消息给broker;如果失败返回取消给broker
v. broker根据返回结果操作消息状态

2) jms

a)     java定义的消息中间件的api规范,类似于jdbc

b) 消息发送模型
p2p: 点对点基于queue的模式,一个消息只发送给一个消费者;有多个消费者,默认轮询发送消息,达到负载均衡
pub/sub: 基于topic的发布/订阅模式,一个消息发送给所有订阅者
i. 除非显式指定,否则 topic 不会为订阅者保留消息
ii. 可以通过持久化(Durable)订阅来实现消息的保存
iii. 当持久化订阅者重新连接时,将会受到所有的断连期间未消费的消息

3) activeMQ是基于jms模型的消息框架

a) 支持多种通讯协议,常用的是TCP
b) 核心通讯机制包含三部分消息中介(Message Broker)和客户(client: 生产者和消费者)建立连接,关闭连接,心跳
c) 集群: 基于zookeeper+level db的主从,基于文件系统和数据库的主从. 没有负载均衡功能
d) 负载均衡: Broker-Cluster部署方式
e) 自己实现负载均衡
搭建3个基于文件系统的主从
连接信息存到zookeeper的节点中
客户端监控zk节点
客户端启动时去zk中拿mq连接信息
mq集群发生变更后,zk通知客户端

猜你喜欢

转载自blog.csdn.net/zyf_balance/article/details/78729290