RabbitMQ是用Erlang编写的,实现了AMQP协议。
典型应用场景:异步处理、流量削峰、应用解耦、日志处理。
AMQP协议有三部分组成:生产者、消费者、服务端。
AMQP协议的几个重要概念:
- Server
- Connection
- Channel
- Message
- Virtual Host
- Exchange
- Bindding
- RoutingKey
- Queue
1、Server:用来接受客户端的连接
2、Connection:就是TCP的连接
3、Channel:信道,一个信道代表一个会话任务。message的读写操作是在信道中进行的,一个客户端可以有多个channel通信。
4、Message:消息,就是client和server之间传送的数据,由Properties和Body组成,Properties为外包装,对消息进行修饰(优先级、延迟等),Body为消息内容。
5、Virtual Host:虚拟主机,用于逻辑隔离。一个Virtual Host里可以有多个Exchange和Queue,在同一个Virtual Host里不能有同名的Exchange和Queue。
6、Exchange :交换器,接收消息,按路由规则将message路由到1个或多外queue中。 有4种类型:
- direct 该类型的Exchange将所有发送到该Exchange的Message被转发到RoutingKey指定的队列中(路由到Binding和RoutingKey完全匹配的Queue中)。生产者发送的RoutingKey与消费者接收到RoutingKey要完全一致
- topic 该类型的Exchange将所有发送到Topic Exchange的Message被转发到所有RoutingKey中指定的Topic的队列。Topic可以通过模糊匹配来接收自己想要的消息,#匹配一个或者多个关键字,*匹配一个关键字。生产者发送的RoutingKey与消费者接收到RoutingKey做到模糊匹配就可以
- fanout 该类型不处理RoutingKey,会把所有发送到Exchange的消息路由到所有绑定的Queue中。生产者发送的Message会发送给所有绑定的Queue
- header 该类型的Exchange不依赖路由规则来路由消息,而是根据Message中的headers属性进行匹配。生产者发送的Message根据Headers中的配置到指到的Queue。
7、Binding:绑定,Exchange和Queue之间的虚拟连接,Binding可以包含一个或多个RoutingKey。
8、RoutingKey:路由键,用来指定路由规则。生产者将message发给exchange时,exchange就知道把message发送到哪个queue。
9、Queue:消息队列,存储消息,供消费者消费。