RabbitMQ基础知识介绍

官方解释:MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过
                  读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是
                  程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信
,直接调用通常是用于诸
                  如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程
                  序同时执行的要求。

来自网上某网友的解释:MQ( Message Queue) ,即消息队列是在消息的传输过程中保存消息的容器。你把消息
                                       丢进去,然后有个程序去从你的容器里面把消息一条条读出来处理(读取消息,这个过程
                                       相比起直接调用来说,不是立即执行的)。一般用于应用系统解耦、 消息异步分发, 能够
                                        提高系统吞吐量。

通俗的讲:消息生产者(即:传参者)把消息(即:参数)先放进消息队列的broker服务端,然后服务端会根据用户的配置,
                  将消息(即:参数),用交换器Exchange传递给符合要求的Queue队列们,然后该队列们对应的消费者(即:
                  接参者、一般是方法)会拿到该消息(即:参数),然后执行方法。

MQ的产品有很多, 有开源的, 也有闭源, 比如ZeroMQ、RabbitMQ、 ActiveMQ、RocketMQKafka/Jafka、 Kestrel、 Beanstalkd、HornetQ、 Apache Qpid、 Sparrow、 Starling、 Amazon SQS、MSMQ等。

注:Kafka适用于量级比较大的数据消息交互;一般的千万级以上可以考虑使用Kafka;且使用Kafka一般都需要搭
        建集群;如:阿里、腾讯、京东等使用的是Kafka。

注:现在使用较多的是RabbitMQ(RMQ)、ActiveMQ(AMQ)、Kafka(卡夫卡)。


声明:各种MQ的原理、使用方式都差不多,下面通过介绍RabbitMQ来让大家初步了解MQ。

RabbitMQ理论知识:

MQ是一种分布式应用程序的的通信方法,它是消费-生产者模型的一个典型的代表,生产者producer往消息队列中不断写入消息,而另一端消费者consumer则可以读取或者订阅队列中的消息。

RabbitMQ是MQ产品的典型代表,是一款基于AMQP协议可复用的企业消息系统。

先给出一个最基本的原理示意图:

通信过程说明:

消息生产者Producer将消息发送给交换机Exchange(注:如果采用direct或topic路由策略的话,那么在将消息convertAndSend发送给Exchange时,路由键routingKey也需要作为一个参数放入convertAndSend方法,一并发送到Exchange),Exchange会比对消息生产者Producer传过来的路由键routingKey,如果和Exchange上某个绑定的Queue的路由键一致,那么就会将详细推送到这个Queue队列(注:在将队列Queue绑定到direct或topic类型的Exchange时,就需要指定该队列的路由键了,如:BindingBuilder.bind(queue).to(exchange).with(ROUTING_KEY);)。消息消费者(又称:消息订阅者)Consumer接收到消息后,会返回给该Queue一个确认码ACK,该Queue收到ACK后,会删除刚才那条被消费了的消息。

在通信过程中,队列Queue对ACK的处理有以下几种情况:

  • 如果Consumer接收了消息,发送ACK给队列,RabbitMQ会删除队列中这个消息,发送另一条消息给Consumer。consumer订阅消息时设置auto_ack参数为true。

  • 如果Cosumer接受了消息, 但在发送ACK之前断开连接,RabbitMQ会认为这条消息没有被deliver,在Consumer再次连接的时候,这条消息会被redeliver。

  • 如果Consumer接受了消息,但是程序中有bug,忘记了ACK;RabbitMQ不会重复发送消息。

注:当RabbitMQ不会重复发送消息时,我们可以设置队列Queue不需要ACK确认,自动删除发过了的消息(我们一般
       都不这么用);也可以通过设置其最大发送某消息的次数等来设置(详见代码示例中的配置文件)。

注:实际上,Exchange和Queue可以是多对多的关系;且MQ使用模式较多,上面只是画出了最基本最简单的使用方式原理图。

注:安装好erLang,再安装好了RabbitMQ,就相当于安装好了RabbitMQ的服务端了。

Virtual Host:虚拟主机

在RabbitMQ的服务端上可以创建多个虚拟的Message Broker,又叫做Virtual Hosts(vhosts)。每一个vhost本质上是一个mini-Rabbitmq Server,分别管理各自的Exchange,和bindings。vhost相当于物理的server,可以为不同App提供边界隔离,使得应用安全的运行在不同的vhost实例上,相互之间不会干扰。Producer和Consumer连接Rabbit Server需要指定连接到哪一个vhost,否则默认连接到“/”这个vhost。

注:一个Virtual Host里可以有多个Exchange和Queue。

Queue:队列

消息队列,提供了FIFO(即:First In First Out先进先出的数据结构。它只允许在表的前端进行删除操作,而在表的后端进行插入操作)的处理机制,具有缓存消息的能力,用于存储还未被消费者消费的消息。

Exchange:交换机

接收生产者发送的消息,并根据ExchangeType(即路由策略:fanout、direct、topic、headers)将消息路由到服务器中的队列Queue。

注:Exchange 与 Queue可以是多对一、一对多、多对多的关系。

Message:传递的消息

消息是传输的主体,消息包括两部分:有效载荷(payload)和标签(label);有效载荷是要传输的数据,可以是任何内容,比如JSON串、二进制、自定义的数据协议等;标签描述了有效载荷,并且Rabbit用它来决定谁将获得消息的投递。即:payload相当于请求体;label相当于head。

Producer 、 Consumer:生产者和消费者

生产者创建消息,然后发送到代理服务器(RabbitMQ Server),AMQP只会用标签表述这条消息(一个交换器名称和可选的主题标记),Rabbit服务器会根据标签把消息发送给订阅的消费者;消费者消费消息,它会订阅到队列(queue)上,每当有消息到达RabbitMQ服务器时,会发送给消费者,消费者收到消息时,会进行处理。

注:消费者收到的消息只包括有效载荷,所有不会知道是从哪里发来的。

连接(TCP)和信道(Channel):

要想发布或消费消息,必须先与RabbitMQ Server建立一条TCP连接,建立TCP连接之后,要创建一条Channel信道,信道是建立在真实TCP连接的虚拟连接;AMQP命令都是通过信道发送出去的,每条信道会被指派一个唯一的ID,不直接通过TCP连接发送AMQP命令是因为操作系统建立和销毁TCP会话是很昂贵的,而且创建的连接数也有限。 通过创建Channel通道来传输消息,降低一些开销;而且Channel通道是私密的、相互不受影响的。


RabbitMQ的安装、创建虚拟主机、用户密码等

第一大步:安装Erlang

第二大步:安装RabbitMQ

Windows下安装RabbitMQ注意事项:

安装好了RabbitMQ之后,一定要验证保证rabbitMQ安装成功!

验证方式:定位到安装位置,并且输入rabbitmqctl status指令

我遇见的问题:

输入指令后,报错了  Error: unable to connect to node ……

解决方式:

第一小步:Erlang会生成两个cookie文件:C:\Windows\.erlang.cookie 及

                  C:\用户\你的用户名\.erlang.cookie。检查两个文件内容是否一致,
                   不一致用其中一个替换另一个即可。

第二小步:用上面这个文件覆盖下面两个目录中的同名文件(如果有的话):
                  C:\Windows\SysWOW64\config\systemprofile
                  C:\Windows\System32\config\systemprofile
第三小步:打开服务面板(运行》》services.msc),重新启动RabbitMQ服务

第四小步:再次cmd窗口,定位到安装位置,并且输入rabbitmqctl status指令,验证(成功)

第三大步:创建virtual host 以及 user

提示一:我们也可以不创建virtual host和user,直接使用RabbitMQ默认提供的用户(“guest”),密码(“guest”),
                virtual host(“/”)也行。

提示二:这里是在图形界面创建的;也可以使用命令行进行创建。

Windows下,如果我们想在浏览器界面管理rabbitMQ的话,那么我们还需要在rabbitMQ安装目录下的sbin文件夹下执行DOS指令:rabbitmq-plugins enable rabbitmq_management,然后访问localhost:15672(其中,15672是其默认端口)即可。

注:访问该链接时,需要账号密码;第一次登陆时,可以先以访客身份(账号:guest 密码:guest)登陆,然后进去了再进行
       账号的创建配置。

下面给出图片步骤:

第一小步:先以guest身份(密码:guest)登录进去

第二小步:创建Virtual Host

第三小步:创建User

第四小步:给刚才创建的User指定Virtual Host

点击进去,指定Virtual Host

第五小步:退出,然后以刚才新创建的身份进行登录即可

^_^ 如有不当之处,欢迎指正

^_^ 本文参考链接:
              http://qqtalk.iteye.com/blog/2419949
              https://www.cnblogs.com/jun-ma/p/4840869.html
              https://www.cnblogs.com/wyt007/p/9078647.html
              https://blog.csdn.net/qq_36838191/article/details/79914274
              https://baijiahao.baidu.com/s?id=1549509246303295&wfr=spider&for=pc

^_^ 本文已经被收录进《程序员成长笔记(二)》,作者JustryDeng

RabbitMQ基础知识介绍、RabbitMQ的安装相关推荐

  1. RabbitMQ基础知识详解

    RabbitMQ基础知识详解 2017年08月28日 20:42:57 dreamchasering 阅读数:41890 标签: RabbitMQ 什么是MQ? MQ全称为Message Queue, ...

  2. python基础知识及数据分析工具安装及简单使用(Numpy/Scipy/Matplotlib/Pandas/StatsModels/Scikit-Learn/Keras/Gensim))

    Python介绍. Unix & Linux & Window & Mac 平台安装更新 Python3 及VSCode下Python环境配置配置 python基础知识及数据分 ...

  3. 数据库入门理论知识介绍以及编译安装MySql

    数据库入门理论知识介绍以及编译安装MySql 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 前言: 1.目前90%以上的公司面临的运维的瓶颈都在后端 最常见的2大瓶颈就是: 1&g ...

  4. ROS Qt环境的搭建及基础知识介绍

    ROS Qt环境的搭建及基础知识介绍 文章目录 ROS Qt环境的搭建及基础知识介绍 1. 开发环境搭建 1.1 qtcreator安装 1.2 catkin_create_qt_pkg环境配置 1. ...

  5. 相声文化艺术基础知识介绍PPT模板

    模板介绍 精美PPT模板设计,相声文化艺术基础知识介绍PPT模板.一套其它幻灯片模板,内含青色多种配色,精美风格设计,动态播放效果,精美实用. 一份设计精美的PPT模板,可以让你在汇报演讲时脱颖而出. ...

  6. 代理服务器基础知识介绍及防火墙知识普及

    代理服务器基础知识介绍及防火墙知识普及 2004-10-17     作者:佚名    来源:诗凌工作室 代理服务器基础知识介绍: Internet大家已经不在陌生,现在已经迈进了广大工薪阶层的家庭. ...

  7. springsecurity-oauth2之基础知识介绍(一)

    springsecurity-oauth2之基础知识介绍(一) 1.公钥与私钥 本项目采用JWT令牌生成采用非对称加密算法. 1.1 自己电脑上安装 Win64OpenSSL-1_1_1b.exe 1 ...

  8. NLP汉语自然语言处理入门基础知识介绍

    NLP汉语自然语言处理入门基础知识介绍 自然语言处理定义: 自然语言处理是一门计算机科学.人工智能以及语言学的交叉学科.虽然语言只是人工智能的一部分(人工智能还包括计算机视觉等),但它是非常独特的一部 ...

  9. 【 MATLAB 】逆离散余弦变换(idct)的基础知识介绍

    基础知识介绍 逆离散余弦变换从离散余弦变换 (DCT) 系数中重建序列.idct 函数是 dct 函数的逆. The DCT has four standard variants. For a tra ...

最新文章

  1. Ubuntu 16.04 安装anaconda3详细教程(从下载源到测试成功)
  2. django使用ckeditor富文本编辑器-转
  3. C++中实现回调机制的几种方式
  4. 进程中dll模块的隐藏
  5. Windows Server 2012 在个人终端上使用的推荐设置
  6. django07: 模板语言(旧笔记)
  7. make and make bzImage
  8. ubuntu ip设置
  9. maven学习(1)
  10. iOS直播点赞动画,iOS直播心型点赞动画
  11. linux查询rpm包详细信息
  12. 【DOS BAT】Windows下微信双开、微信多开
  13. 技术对接场景,打破创新窘境
  14. c语言16qam,基于SIMULINK的OFDM-16QAM系统仿真与分析
  15. Embedded Linux学习笔记—TQE9_i.MX6Q LTIB环境配置
  16. 爬取某家网二手房数据(详细教程)
  17. 【3D目标检测】open3D安装与使用
  18. 重磅推荐!5 款强大的开源报表工具
  19. 【微信小程序】史上最全的《Java面试题及解析》,理论+实战双管齐下!
  20. 求最小公倍数利用数组java_菜鸟级求解:Java求1到20的最小公倍数

热门文章

  1. 【前沿】阅读《凤凰涅槃 数说“十三五”中国经济大转变》
  2. 内存照片删除能恢复吗?电脑误删内存卡照片如何恢复
  3. 【2021/5/8发布适用】在 Windows 上架设 7 Days to Die 服务端(基于官方教程)
  4. 中国各城市首轮感染高峰期预测!(更新版)
  5. 基于javaweb+jsp的仓库进销存管理系统(JavaWeb MySQL JSP Bootstrap Servlet SSM SpringBoot)
  6. 单片机给大文件做 CRC32 校验
  7. 数论概论读书笔记 22.二次互反律
  8. 安卓比苹果危险?98% 恶意软件针对安卓!苹果反对开放 APP 第三方下载
  9. shell通过邮件服务器发送邮件,shell脚本通过sendEmail25端口发送邮件
  10. Linux遭遇Segmentation fault