组件
整体上来说,可以分为三个部分
1.生产者
2.消息队列
3.消费者
推/拉模型
消费者模型
RocketMQ
整体架构
1.生产者集群:生产消息发送到RocketMQ集群
2.broker集群:负责消息存储、查询、服务高可用
3.NameServer:Topic路由的注册中心(每个topic对应一个queue),支持broker的服务注册和发现,集群中各节点不互通信息
4.消费者队列:从RocketMQ订阅消息,支持push pull两种方式获取消息
RocketMQ单实例环境
1.主体模型及功能
a.支持按照tag或者sql进行消息过滤
b.所有的消息存在commitlog,而非segment中,同一时刻只有一个commitlog是被写的
c.索引层面会分离,存偏移量和tag
d.有.index文件,存一些时间信息以及key的信息
上述三个都是固定大小,都是顺序io
message存commit log偏移量以及长度,还有哈希值
2.消息存储和检索
a.按照message id来查询
b.按照MessageKey来查询
c.按照消息队列偏移量查询
3.同步刷盘和异步刷盘
同步:
异步:
4.消费模型
RocketMQ多实例环境
4.5 前,主从架构
主节点挂掉了之后,切换比较长
4.5 后 Raft架构
数据复制,故障转移:
负载均衡:
RabbitMQ
一款实现了AMQP(advanced Message Queuing Protocol)的基础上,并进行额外扩展的消息队列,针对多种工作模式,消息持久化,确认消费等
1.连接:
2.管道:在连接里获取一个channel,然后再去交互(tcp连接)
3.虚拟主机:通过虚拟主机来完成资源的隔离,由交换机和队列组成,交换机把不同的消息分配到不同的队列,交换机和队列通过绑定的方式实现,有一个绑定的key
4.队列:
现在用的越来越少了,消息存储在内存,支持消息持久化
高可用和集群比较麻烦
RabbitMQ的几种工作模式
1.hello word
2.工作队列:生产者生产,多个消费者
3.发布订阅(fanout)模式:将消息交给交换机,然后发给所有的队列,让下游消费
4.路由模式:生产者的key和对应的binding key匹配发送到对应queue
5.主题模式:通过通配符来做路由的正则匹配,然后转发到对应queue
6.模拟RPC模式,客户端发送Request然后绑定回调队列,服务端消费队列,然后把处理的结果填充到请求的回调队列中,客户端监听回调队列