rabbitmq 简介
RabbitMQ可以做什么?
RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,可用于在分布式系统中存储转发消息,主要有以下的技术亮点:
- 可靠性
- 灵活的路由
- 集群部署
- 高可用的队列消息
- 可视化的管理工具
RabbitMQ主要用于系统间的双向解耦,当生产者(productor)产生大量的数据时,消费者(consumer)无法快速的消费信息,那么就需要一个类似于中间件的代理服务器,用来处理和保存这些数据,RabbitMQ就扮演了这个角色。
如何使用RabbitMQ
- Erlang语言包
- RabbitMQ安装包
基本概念
1.Broker
用来处理数据的消息队列服务器实体
2.虚拟主机(vhost)
由RabbitMQ服务器创建的虚拟消息主机,拥有自己的权限机制,一个broker里可以开设多个vhost,用于不同用户的权限隔离,vhost之间是也完全隔离的。
3.生产者(productor)
产生用于消息通信的数据
4.信道(channel)
消息通道,在AMQP中可以建立多个channel,每个channel代表一个会话任务。
5.交换机(exchange)
(1)接受消息,转发消息到绑定的队列,总共有四种类型的交换器:direct,fanout,topic,headers。
- direct:转发消息到routing-key指定的队列
- fanout:转发消息到所有绑定的队列,类似于一种广播发送的方式。
- topic:按照规则转发消息,这种规则多为模式匹配,也显得更加灵活
(2).交换器在RabbitMQ中是一个存在的实体,不能改变,如有需要只能删除重建。
(3).topic类型的交换器利用匹配规则分析消息的routing-key属性。
(4).属性
- 持久性:声明时durable属性为true
- 自动删除:绑定的queue删除也跟着删除
- 惰性:不会自动创建
6.队列(queue)
(1).队列是RabbitMQ的内部对象,存储消息
(2).可以动态的增加消费者,队列将接受到的消息以轮询(round-robin)的方式均匀的分配给多个消费者
(3).队列的属性
- 持久性:如果启用,队列将会在server重启之前有效
- 自动删除:消费者停止使用之后就会自动删除
- 惰性:不会自动创建
- 排他性:如果启用,队列只能被声明它的消费者使用。
7.绑定(binding)
表示交换机和队列之间的关系,在进行绑定时,带有一个额外的参数binding-key,来和routing-key相匹配。
8.消费者(consumer)
监听消息队列来进行消息数据的读取
9.高可用性(HA)
(1).在consumer处理完消息后,会发送消息ACK,通知通知RabbitMQ消息已被处理,可以从内存删除。如果消费者因宕机或链接失败等原因没有发送ACK,则RabbitMQ会将消息重新发送给其他监听在队列的下一个消费者。
channel.basicConsume(queuename, noAck=false, consumer);
- 1
(2).消息和队列的持久化
(3).镜像队列,实现不同节点之间的元数据和消息同步
RPC之nova专题
在Openstack中,每一个Nova服务初始化时会创建两个队列,一个名为“NODE-TYPE.NODE-ID”,另一个名为“NODE-TYPE”,NODE-TYPE是指服务的类型,NODE-ID指节点名称。
1.nova中实现exchange的种类
- direct:初始化中,各个模块对每一条系统消息自动生成多个队列放入RabbitMQ服务器中,队列中绑定的binding-key要与routing-key匹配
- topic:各个模块也会自动生成两个队列放入RabbitMQ服务器中。
2.nova中调用RPC的方式
- RPC.CALL:用于请求和响应方式
- RPC.CAST:只是提供单向请求
3.nova中模块的逻辑功能
- Invoker:向消息队列中发送系统请求信息,如Nova-API和Nova-Scheduler,通过RPC.CALL和RPC.CAST两个进程发送系统请求消息。
- Worker:从消息队列中获取Invoker模块发送的系统请求消息以及向Invoker模块回复系统响应消息,如Nova-Compute、Nova-Volume和Nova-Network,对RPC.CALL做出响应。
4.nova中的exchange domain
-
direct exchange domain: Topic消息生产者(Nova-API或者Nova-Scheduler)与Topic交换器生成逻辑连接,通过PRC.CALL或者RPC.CAST进程将系统请求消息发往Topic交换器。交换器根据不同的routing-key将系统请求消息转发到不同的类型的消息队列。Topic消息消费者探测到新消息已进入响应队列,立即从队列中接收消息并调用执行系统消息所请求的应用程序。
- 点到点消息队列:Topic消息消费者应用程序接收RPC.CALL的远程调用请求,并在执行相关计算任务之后将结果以系统响应消息的方式通过Direct交换器反馈给Direct消息消费者。
- 共享消息队列:Topic消息消费者应用程序只是接收RPC.CAST的远程调用请求来执行相关的计算任务,并没有响应消息反馈。
-
topic exchange domain: Direct交换域并不是独立运作,而是受限于Topic交换域中RPC.CALL的远程调用流程与结果,每一个RPC.CALL**一次Direct消息交换的运作。
上一篇: RabbitMQ简介
下一篇: postman 参数传日期格式时写法
推荐阅读
-
C#使用String和StringBuilder运行速度测试及各自常用方法简介
-
C#中String和StringBuilder的简介与区别
-
C#栈和队列的简介,算法与应用简单实例
-
Spring Boot RabbitMQ 延迟消息实现完整版示例
-
Java异常简介和架构_动力节点Java学院整理
-
解读ASP.NET 5 & MVC6系列教程(1):ASP.NET 5简介
-
简介Winform中创建用户控件
-
Python通过RabbitMQ服务器实现交换机功能的实例教程
-
详解Python操作RabbitMQ服务器消息队列的远程结果返回
-
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程