快速入门分布式消息队列之 RabbitMQ(1)
目录
前言
在《消息队列在分布式系统中的应用》一文中我们介绍了消息队列与分布式系统两者间的密切关系以及消息队列的应用场景。本篇以 RabbitMQ 为例,继续深入了解消息队列中间件的运行方式。
简介
AMQP(Advanced Message Queuing Protocol,高级消息队列协议)是一个基于应用层的异步消息服务协议,为面向消息的中间件设计提供了统一实现规范。AMQP 协议的目标是实现一种在全行业内广泛使用的标准消息中间件,解决众多消息队列供应商接口不统一的问题。RabbitMQ 就是使用 Erlang 编程语言开发的一个 AMQP 开源实现,是目前为止部署最广泛的开源消息代理和消息队列中间件。作为一个企业级消息系统,RabbitMQ 支持多种编程语言和客户端,并且自带了集群、管理、插件等功能,拥有着良好的高可用性、可扩展性和易用性。
安装 RabbitMQ
RabbitMQ 提供了详尽的安装文档步骤,我们可以根据不同的操作系统类型来进行选择。
以 Ubuntu 为例,可以执行安装指令:
sudo apt-get install -yq rabbitmq-server
启动 rabbitmq-server:
sudo service rabbitmq-server start
查看 Queues 列表:
sudo rabbitmqctl list_queues
基本对象概念
在学习 RabbitMQ 的实际操作之前,首先需要掌握下列 RabbitMQ 的基本对象概念。
Message 消息
是 RabbitMQ 的操作单元,由 Payload 有效负载和 Label 标签两部分组成,前者作为消息的主体数据,后者则包含了消息路由转发相关的描述数据。
Producer 生产者
负责生产消息,通过设定 Label 的内容来决定将消息投递到指定队列。
Consumer 消费者
负责接收消息并执行相应的任务,消费者仅仅会关心消息的 Payload,而无需关心消息的 Label。消费者会从订阅的队列中获取消息,如果有多个消费者订阅了同一队列,那么队列默认会以平摊的方式将消息分派给消费者。
Queue 队列
是存放消息的地方,消息会在队列中以 FIFO 的方式等待取出。
Exchange 交换机
生产者和队列之间的中转站,充当路由器的功能,将消息路由到不同的队列中,最后再被订阅了该队列的消费者取出。
Binding 绑定
为队列和交换机建立绑定关系,只有在确立了绑定关系之后,交换机才会将消息路由到相应的队列中,每一个绑定关系都会包含有一个 Binding Key。
Binding Key 绑定键
在绑定交换机和队列时,会为此次绑定设置一个 Key 值,作为唯一标识。
Routing Key 路由键
消息的路由转发描述,用作消息和队列之间的匹配,会在队列绑定到交换机时设置。同时,生产者在生产消息时也为该消息指定一个路由键,以此来决定由将该消息存放到哪一个队列中。实际上 Routing Key 可能还需要结合 Exchange Type 以及 Binding Key 才能最终决定路由目标。
Exchange Type 交换机类型
RabbitMQ 支持 fanout、direct、topic、headers 四种交换机类型,每种类型都具有特定的消息路由策略。
fanout exchange 扇形交换机:该类型交换机会无视路由键,将同一份消息路由给绑定到扇形交换机自身的所有队列,所以扇形交换机采用的是广播路由策略。也就是说同一份消息会被分发给不同的消费者,进而执行不同的任务。这一特性,非常符合「单一操作,多重响应」的场景,例如:Blog 系统中的一个新建博文操作,实际上需要完成新建博文记录、更新文章计数、推送订阅邮件等多种响应。
direct exchange 直连交换机:当队列绑定到交换机之后,会为此次绑定设置一个路由键。生产者将消息发送到交换机之前,也会为消息设置一个路由键,直连交换机会通过匹配消息路由键与绑定路由键来确定消息路由目标。所以直连交换机采用的是单播路由策略。
topic 主题交换机:在交换机与队列建立绑定时,除了会设置路由键之外还会设置一个绑定键,而且绑定键支持通配符 *(单个字符) 和 #(任意个字符)两种形式。主题交换机会通过匹配消息路由键和绑定键来确定消息路由目标,也就是说同一个队列能够接收不同路由键的消息(绑定键具有通配符),所以主题交换机是一种多播路由策略。需要注意的是,应用主题交换机时,消息的路由键命名格式应该是以 ’.’ 分割的单词词组。例如:路由键分别为 task.add、task.sub、task.mult 的消息都会路由到绑定键为 ‘task.#’ 的队列中。
headers 头交换机:头交换机不会依赖路由键和绑定键作为路由策略因素,而是单纯的通过消息中所包含的 AMQP 协议头信息来决定,该类型交换机因为效率问题,一般很少被用到。
最后
本篇最为《快速入门分布式消息队列之 RabbitMQ》的上篇主要介绍了 RabbitMQ 架构的对象概念,通过了解这些对象的概念,相信能够对 RabbitMQ 的运行机理有一个初步的认识。
快速入门分布式消息队列之 RabbitMQ(1)的更多相关文章
- 快速入门分布式消息队列之 RabbitMQ(3)
目录 目录 前文列表 前言 通道 Channel 一个基本的生产者消费者实现 消费者 生产者 运行结果 应用预取计数 应用 ACK 机制 最后 前文列表 快速入门分布式消息队列之 RabbitMQ(1 ...
- 快速入门分布式消息队列之 RabbitMQ(2)
目录 目录 前文列表 RabbitMQ 的特性 Message Acknowledgment 消息应答 Prefetch Count 预取数 RPC 远程过程调用 vhost 虚拟主机 插件系统 最后 ...
- 【转】快速理解Kafka分布式消息队列框架
from:http://blog.csdn.net/colorant/article/details/12081909 快速理解Kafka分布式消息队列框架 标签: kafkamessage que ...
- 分布式消息队列XXL-MQ
<分布式消息队列XXL-MQ> 一.简介 1.1 概述 XXL-MQ是一款轻量级分布式消息队列,支持串行.并行和广播等多种消息模型.现已开放源代码,开箱即用. 支持三种消息模式: ...
- RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ基础知识详解,RabbitMQ布曙
消息队列及常见消息队列介绍 2017-10-10 09:35操作系统/客户端/人脸识别 一.消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以 ...
- Netty构建分布式消息队列(AvatarMQ)设计指南之架构篇
目前业界流行的分布式消息队列系统(或者可以叫做消息中间件)种类繁多,比如,基于Erlang的RabbitMQ.基于Java的ActiveMQ/Apache Kafka.基于C/C++的ZeroMQ等等 ...
- EQueue - 一个C#写的开源分布式消息队列的总体介绍
前言 本文想介绍一下前段时间在写enode时,顺便实现的一个分布式消息队列equeue.这个消息队列的思想不是我想出来的,而是通过学习阿里的rocketmq后,自己用c#实现了一个轻量级的简单版本.一 ...
- 分享一个c#写的开源分布式消息队列equeue
分享一个c#写的开源分布式消息队列equeue 前言 equeue消息队列中的专业术语 Topic Queue Producer Consumer Consumer Group Broker 集群消费 ...
- 消息队列之 RabbitMQ
https://www.jianshu.com/p/79ca08116d57 关于消息队列,从前年开始断断续续看了些资料,想写很久了,但一直没腾出空,近来分别碰到几个朋友聊这块的技术选型,是时候把这块 ...
随机推荐
- 二: Jvm内存模型
因为每个对象生命周期不一样,jvm在做内存管理的时候,就帮我们分成了三个区域: 1. 新生代(回收频率高) 新生和老年默认大小比例为1:2 2. 老年代(回收频率低) 最好所有的对象都 ...
- burp intruder模块详解
0×01 介绍 安装要求: Java 的V1.5 + 安装( 推荐使用最新的JRE ), 可从这里免费 http://java.sun.com/j2se/downloads.html Burp Sui ...
- 【学习总结】快速上手Linux玩转典型应用-第6章-linux常用命令讲解
课程目录链接 快速上手Linux玩转典型应用-目录 目录 1. 软件操作命令 2. 服务器硬件资源信息 3. 文件操作命令 4. Linux文本编辑神器vim与其他常用命令 5. 系统用户操作命令 6 ...
- DOMContentLoaded和load的区别
一.概念 DOMContentLoaded 当初始的 HTML 文档被完全加载和解析完成之后,DOMContentLoaded 事件被触发,而无需等待样式表.图像和子框架的完成加载. load loa ...
- CSS的优先级理解
样式的优先级 多重样式(Multiple Styles):如果外部样式.内部样式和内联样式同时应用于同一个元素,就是使多重样式的情况. 一般情况下,优先级如下: (外部样式)External styl ...
- Android Studio的安装
下载Android Studio(需要翻墙才能安装得快):直接到官网进行下载就可以了.下载地址:https://developer.android.com/ “Android Virtual Devi ...
- java.lang.Void类源码解析_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 在一次源码查看ThreadGroup的时候,看到一段代码,为以下: /* * @throws NullPointerEx ...
- 借用的对vue-cli配置对解析
- vue addRoutes路由动态加载
需求:增加权限控制,实现不同角色显示不同的路由导航 思路:每次登陆后请求接口返回当前角色路由 核心方法:vue-router2.2.0的addRoutes方法 + vuex 以下是我实现的获取菜单路由 ...
- idea 打包model 为jar包
1,在项目上鼠标右键 --> Open Module Settings 2, Artifacts --> + --> JAR --> From modules with dep ...