摘要说明:
消息队列(MQ):MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。
MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取或者订阅队列中的消息。
RabbitMQ:RabbitMQ是MQ的一种,是流行的开源消息队列系统,用erlang语言开发。RabbitMQ是AMQP(高级消息队列协议)的标准实现;
步骤:
1.RabbitMQ基本概念
RabbitMQ的基本结构原理图如下:
从主体(角色)上来说,整个流程主要分为:
生产者(producer):向消息队列中投递消息;
消费者(consumer):从消息队列中获取消息进行消费;多个消费者可以同时消费一个消息队列但每个消息只能被一个消费者消费;
消息队列(Queue):消息队列,消息的载体;每个消息可被投入到一个或多个消息队列;
消息交换机(Exchange):生产者生产消息后,通过exchange指定消息按什么规则将消息路由到哪个消息队列;
路由关键字(Routing Key):exchange通过这个路由关键字来确定怎么路由;
绑定(Binding):指的是把消息交换机exchange和消息队列queue按照路由规则绑定这个动作;
服务器实体(Broker):指的是消息队列服务器实体;
虚拟主机(vhost):虚拟主机,一个服务器实体里可以开设多个虚拟主机用作不同用户的权限分离;
各个主体间的对照关系为:
一个生产者对应多个消息交换机,同时一个消息交换机可被多个生产者调用;
一个消息交换机可以绑定消息到多个消息队列,同时一个消息队列可以被对个消息交换机注入;
一个消费者可以消费多个队列的消息,但一个消息只能被一个消费者消费;
一个实体服务器可以开设对个虚拟主机;
2.RabbitMQ运作原理
RabbitMQ的基本使用流程为:
1》创建一个虚拟主机vhost
2》声明一个消息队列queue,设置相关属性;
3》声明一个消息交换机exchange,设置相关属性;
4》执行一个绑定规则即路由关键字routing Key;将exchange和queue之间建立绑定关系;
5》生产者投递消息,经过exchange按照routing Key路由到queue;
6》消费者从queue中取出消息进行消费;
上述消息交换机Exchange的类型有三种匹配方式
fanout:把所有发送到该Exchange的消息投递到所有与它绑定的队列中。
direct:把消息投递到那些binding key与routing key完全匹配的队列中。
topic:将消息路由到binding key与routing key模式匹配的队列中。