大伙可以到我的RabbitMQ专栏获取更多信息
AMQP
AMQP全称Advanced Message Queuing Protocol(高级消息队列协议),是一个网络协议,是应用层协议的一个开放标准,为面向消息的中间件而设计。
基于此协议的客户端于消息中间件可以传递消息,一个平台中立、产品中立、语言中立的协议(并不受客户端、中间件产品、不同开发语言等条件的限制)。
Publisher(生产者)
产生消息的源
Consumer(消费者)
从MQ获取消息
Exchange(交换机)
- 功能真的类似于网络交换机,是用来分发消息的
- 将消息分发到不同的Queue中
- 消息的分发到哪个Queue是根据Routes(路由规则)来决定的
Queue(消息队列)
用来存储消息的
RabbitMQ简介
2007年由Rabbit技术公司基于AMQP协议开发的RabbitMQ 1.0 发布。RabbitMQ使用Erlang语言开发,Erlang是专为高并发和分布式系统而生的语言。
- Producer是生产者,与消费者Consumer都是客户端,通过Connection与RabbitMQ服务Broker通信
- Connection用于和Producer、Consumer建立TCP连接
- 由于每通信一次,客户端就和Connection建立一次连接是一种浪费的行为,所以Connection被设计成了内含很多channel的一个载体,解决了连接服用的问题,节约资源。
- Channel是在Connection内部建立的逻辑连接,如果应用程序支持多线程,通常每个线程创建单独的channel进行通讯。AMQP协议包含了Channel id帮助客户端和Broker识别Channel,所以Channel之间是完全隔离的,从而使用Channel作为轻量级的Connection极大的建超了操作系统建立TCP连接的开销
- Broker中有很多的Virtual Host(虚拟机),每个虚拟机内存在很多的Exchange和Queue,Virtual Host之间相互隔离,起到了逻辑分区的作用。不同的MQ用户在自己的Virtual Host中创建Exchange和Queue
- Exchange通过Binding(一种绑定的过程)与Queue建立关系,是Message到达Broker的第一站,根据分发规则,匹配查询表中的routing key,分发Message到Queue中去。常用的类型有:direct(point-to-point)、topic(publish-subscribe)、fanout(multicast)
- Message到达Queue之后等待被Consumer消费
- Binding:Exchange和Queue之间的虚拟连接,Binding中可以包含routing key,Binding信息被保存在Exchange中的查询表,用于记录Message的分发依据
RabbitMQ的7中工作模式
简单模式
Work Queues
Publish/Subscribe(发布于订阅)
Routing(路由模式)
Topics(主题模式)
RPC远程调用模式
Publisher Confirms