知识要点:
RabbitMQ几大组件
交换器类型
RabbitMQ运行流程
Connection与Channel
生产者运行流程
消费者运行流程
AMQP协议中的相关指令
细说交换器
RabbitMQ几大组件
生产者
消息
消费者
Broker:消息中间件的服务节点
队列:
RabbitMQ中消息只能存储在队列上,RabbitMQ不支持队列层面的广播交换器:
交换器仅仅对消息进行转发,有不同的交换器类型(如: fanout. direct. topic、 headers)路由键:
交换器与队列的关系,通过绑定键(BindingKey, 称为路由键)建立绑定消息是发送到交换器上,然后通过路由键来确认应该存放在哪个队列上,如果路由不到, 消息可能会丢失、返回给生产者
交换器类型
fanout (分列) : 它会把所有发送到该交换器的消息,路由到所有与该交换器绑定的队列中;
RabbitMQ运行流程
生产者发送消息
1.生产者与Broker建立连接(Connection) ,开启信道(Channel)
2.生产者声明交换器(交换器类型、是否持久化、是否自动删除等)
3.生产者声明队列(是否持久化、是否排他、是否自动删除)
4.生产者通过路由键将交换器和队列绑定
5.生产者发送消息至Broker (携带路由键等)
6.交换器根据接收到的路由键,以及交换器类型查找匹配的队列
7.找到,队列将消息存入相应队列中
8.找不到,则根据生产者的配置,选择丢弃还是回退给生产者
9.关闭信道
10.关闭连接
消费者接收消息
1.消费者与Broker建立连接(Connection) ,开启信道(Channel)
2.消费者向Broker请求消费相应队列的消息,可能设置回调函数
3.等待Broker回应并投递相应队列中的消息,接收消息
4.消费者确认(ack) 接收到的消息
5.RabbitMQ从队列中删除相应已经被确认的消息
6.关闭信道
7.关闭连接
Connection.与Channel?
RabbitMQ所有的AMQP指令都是通过信道完成的。
RabbitMQ的ChanneI与Netty中的NIO模型区别在于Channe|是建立在TCP连接之上的。