mq消息中间件耳熟能详的东西了,在大多数情况下我们会从kafka、rocketmq、rabbitmq三种消息中间件去根据不同业务选择.kafka吞吐量大在大数据领域使用较多,我们一般之前的系统一些数据指标埋点监控或者一些日志采集通过flume到kafka都是使用kafka,而涉及到具体的业务数据我们大多是使用rabbitmq来的,而rocketmq却相对使用的较少,因为一般rabbitmq的性能已能支持很多业务场景了我们每日的调用量目前是3个亿左右,之前在内部做技术分享过rocketmq,主要还是借鉴kafka的原理去实现的然后再细分的不同功能上又借鉴业界的一些方式去实现,比如分布式事务借鉴两阶段提交,还有些顺序消息其实跟kafka类似, 不过kafka是分区顺序二rocketmq是全局顺序,定时消息我理解的是跟redis过期有点类似. 而其他的东西比如为了数据安全又会做同步异步刷盘和同步双写异步复制之类的,为了提高性能又会使用缓存和zero-copy等一些东西,其实大多数框架使用的都是这些.如es也是有几个缓存.本次只记录rabbitmq的几种工作模式不对kafka(原理和rocketmq类似,不过采用了topic下分区每个分区单独的日志文件而rocketmq是全局topic的commitlog,所以rocketmq是支持更多队列,维护文件句柄少)和rocketmq(之前分享过)的介绍
一、 RabbitMQ的基本结构:
- 组成部分说明:
Broker:消息队列服务进程,此进程包括两个部分:Exchange和Queue
Exchange:消息队列交换机,按一定的规则将消息路由转发到某个队列,对消息进行过虑。
Queue:消息队列,存储消息的队列,消息到达队列并转发给指定的
Producer:消息生产者,即生产方客户端,生产方客户端将消息发送
Consumer:消息消费者,即消费方客户端,接收MQ转发的消息。
- 生产者发送消息流程:
1、生产者和Broker建立TCP连接。
2、生产者和Broker建立通道。
3、生产者通过通道消息发送给Broker,由Exchange将消息进行转发。
4、Exchange将消息转发到指定的Queue(队列)
- 消费者接收消息流程:
1、消费者和Broker建立TCP连接
<