二、RabbitMQ简介及AMQP协议
RabbitMQ简介
RabbitMQ是开源的消息代理和队列服务器,是由Erlang语言开发的,基于AMQP协议(Advanced Message Queuing Protocol高级消息队列协议)的标准实现。具有良好的性能和时效性,同时还能够非常好的支持集群和负载部署,非常适合在较大规模的分布式系统中使用。
为什么使用RabbitMQ:
- 安装部署简单,上手门槛低,功能丰富,符合AMQP标准;
- 企业级消息队列,经过大量实践考验的高可靠;
- 集群易扩展,可以轻松的增减集群节点;
- 有强大的WEB管理页面。
RabbitMQ作为消息队列系统优势:
从http://www.doc88.com/p-5826232080382.html 中对于RabbitMQ评价有两个维度:十万米高空看RabbitMQ和显微镜看RabbitMQ:
- 十万米高空看RabbitMQ:
- 有商业化的运营,不会轻易死掉;
- 遵循AMQP协议,不会被绑架;
- 强大的社区支持,为技术进步提供动力;
- 大量成功的应用案例,例如阿里、网易、滴滴、美团等互联网企业都有使用。
- 显微镜看RabbitMQ:
- Erlang开发,AMQP的标准实现,在支持持久化的消息队列中性能算很优秀的;
- 支持消息持久化、支持消息确认机制、灵活的任务分发机制等,支持功能非常丰富;
- 保证数据不丢失的前提做到高可靠性、可用性;
- 集群模式丰富,表达式配置,HA模式,镜像队列模型,集群扩展很容易,并且可以通过增加节点实现成倍的性能提升;
- WEB管理和监控, WEB管理为后期运维提供很大的便利。
RabbitMQ劣势:
性能比kafka和zero面前性能差(持久化消息和ACK确认的情况下生产和消费消息单机大约在1-2万左右)
结论:如果希望使用一个可靠性高、功能强大、易于管理的消息队列系统那么就选择RabbitMQ,如果想用一个性能高,但偶尔丢点数据不是很在乎可以使用kafka或者zeroMQ。
AMQP协议
AMQP(Advanced Message Queue):高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制,可以与不同产品、不同语言之间进行消息交互。
AMQP的基本概念
RabbitMQ是AMQP协议的一个开源实现,其内部实际上也是AMQP的基本概念。AMQP的模型架构和RabbitMQ的模型架构是一样的,生产者将消息发送给交换器,交换器和队列绑定。当生产者发送消息时所携带的RoutingKey与绑定时的BindingKey相匹配时,消息即被存入相应的队列之中。消费者可以订阅相应的队列来获取消息。
相关名词概念
Publisher
也称Producer,消息生产者,数据的发送方。消息生产者连接RabbitMQ服务器然后将消息投递到Exchange。- Consumer
消息消费者,数据的接收方。消息消费者订阅队列,RabbitMQ将Queue中的消息发送到消息消费者。 - Server
又称为Broker。接收客户端连接,实现AMQP的服务器实体。维护一条从Producer到Consumer的路线,保证数据能够按照指定的方式进行传输。但是这个保证也不是100%的保证,对于普通的应用已经足够了。当然对于商业系统来说,可以再做一层数据一致性的guard,就可以彻底保证系统的一致性了。 - Connection
连接,Producer和Consumer都是通过TCP连接到RabbitMQ Server的。程序的起始处就是建立这个TCP连接。Connection可以创建多个Channel,但不能线程间共享。某些情况下可以并发运行,但多线程共享是非线程安全的。 - Channel
信道。建立在上述的TCP连接中,几乎所有的操作都在Channel中进行,Channel是进行消息读写的通道。客户端可建立多个Channel,每个Channel代表一个会话任务。 - Exchange
交换机。接收消息,根据路由键转发消息到绑定的队列。Exchange将消息路由到一个或多个Queue中(或者丢弃)。Exchange并不存储消息。RabbitMQ中的Exchange有fanout、direct、topic、headers四种类型 - Binding
Exchange和Queue之间的虚拟连接,作用是把Exchange和Queue按照路由规则绑定起来。 - RoutingKey
生产者在将消息发送给Exchange的时候,一般会指定一个RoutingKey,Exchange根据这个关键字进行消息投递给Queue。这个RoutingKey需要与Exchange Type及Binding的RoutingKey联合使用才能最终生效。 - Queue
也称为Message Queue,消息队列,保存消息并将它们转发给消费者。多个消费者可以订阅同一个Queue,会被平均分摊给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理 Virtual Host
其实是一个虚拟概念。类似于权限控制组,一个Virtual Host里面可以有若干个Exchange和Queue,可以用来隔离Exchange和Queue。,同一个Virtual Host里面不能有相同名称的Exchange和Queue。默认为"/"
二、RabbitMQ简介及AMQP协议的更多相关文章
- RabbitMQ介绍2 - AMQP协议
这一节介绍RabbitMQ的一些概念,当然也是AMQP协议的概念.官方网站也有详细解释,包括协议的命令: http://www.rabbitmq.com/tutorials/amqp-concepts ...
- RabbitMQ核心概念和AMQP协议(二)
RabbitMQ是什么? RabbitMQ是一个开源的消息代理和队列服务器,用来通过普通协议,在完全不同的应用之间共享数据,RabbirMQ是使用Erlang语言来编写的,并且RabbitMQ是基于A ...
- 消息中间件——RabbitMQ(三)理解RabbitMQ核心概念和AMQP协议!
前言 本章学习,我们可以了解到以下知识点: 互联网大厂为什么选择RabbitMQ? RabbiMQ的高性能之道是如何做到的? 什么是AMQP高级协议? AMQP核心概念是什么? RabbitMQ整体架 ...
- RabbitMQ从零到集群高可用(.NetCore5.0) - RabbitMQ简介和六种工作模式详解
一.RabbitMQ简介 是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据,RabbitMQ是使用Erlang(高并发语言)语言来编写的,并且RabbitMQ是基于AMQ ...
- RabbitMQ探索之路(一):RabbitMQ简介
一:何为RabbitMQ? 作为Windows忠实用户,不得不提微软自带的MSMQ,Windows自带的一个服务,message是存放在文件系统的,这是最原始的消息队列了. 然而如今的分布式以及消息处 ...
- RabbitMQ简介、安装、基本特性API--Java测试
新的阅读体验地址:http://www.zhouhong.icu/post/141 本篇文章所有的代码:https://github.com/Tom-shushu/Distributed-system ...
- AMQP 协议介绍
RabbitMQ 是遵从AMQP 协议的, 换句话说, RabbitMQ 就是AMQP 协议的Erlang 的实现(当然RabbitMQ 还支持STOMP2 .MQTT3 等协议) 0 AMQP 的模 ...
- RabbitMQ二:AMQP协议
参考这个:http://kb.cnblogs.com/page/73759/ 参考这个:http://www.cnblogs.com/charlesblc/p/6286875.html 写的挺好 Ra ...
- RabbitMQ入门教程(二):简介和基本概念
原文:RabbitMQ入门教程(二):简介和基本概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn ...
随机推荐
- Opencv从文件中播放视频
1.VideoCapture()括号中写视频文件的名字,在播放每一帧的时候,使用cv2.waitKey()设置适当的持续时间,太低会播放的很快,太高会很慢,通常情况下25毫秒就行了. 2.获取相机/视 ...
- Linux下常用的3种软件安装方式—rpm、yum、tar
一:Linux源码安装 1.解压源码包文件 源码包通常会使用tar工具归档然后使用gunzip或bzip2进行压缩,后缀格式会分别为.tar.gz与.tar.bz2,分别的解压方式: ...
- LINUX之ntp时间同步服务配置
本篇将介绍LINUX之ntp服务配置,时钟同步服务器配置.这个在很多地方都会用到,保持各主机之前的时间保持一致,保证主机之间的心跳稳定. 三台主机都是centos7 192.168.1.110 mas ...
- Ubuntu的man中文包安装
apt-get install manpages-zh vi /etc/manpath.config :,$s#/usr/share/man#/usr/share/man/zh_CN#g 第一个命令: ...
- 深入分析Java反射(五)-类实例化和类加载
前提 其实在前面写过的<深入分析Java反射(一)-核心类库和方法>已经介绍过通过类名或者java.lang.Class实例去实例化一个对象,在<浅析Java中的资源加载>中也 ...
- D. Minimax Problem(二分+二进制)
D. Minimax Problem time limit per test 5 seconds memory limit per test 512 megabytes input standard ...
- 01 语言基础+高级:1-8 File类与IO流_day09【字节流、字符流】
day09[字节流.字符流] 主要内容 IO流 字节流 字符流 异常处理 Properties 教学目标 能够说出IO流的分类和功能 能够使用字节输出流写出数据到文件 能够使用字节输入流读取数据到程序 ...
- 漫谈设计模式(二):单例(Singleton)模式
1.前言 实际业务中,大多业务类只需要一个对象就能完成所有工作,另外再创建其他对象就显得浪费内存空间了,例如web开发中的servlet,这时便要用到单例模式,就如其名一样,此模式使某个类只能生成唯一 ...
- 1. 模块化的引入与导出 (commonJS规范 和ES6规范)
node组件导出模块 node一般用commonJS规范 可以通过module.exports导出自己写的模块 这样其他的js文件就可以引用并使用这个模块 module.exports = { log ...
- Maven--Maven 安装最佳实践
1.设置 MAVEN_OPTS 环境变量 运行 mvn 命令实际上是执行了 Java 命令,既然是运行 Java,那么运行 Java 命令可用的参数当然也应该在运行 mvn 命令时使用.这个时候,MA ...