RabbitMQ简介特性使用场景安装启动与关闭

Posted jasonboren

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RabbitMQ简介特性使用场景安装启动与关闭相关的知识,希望对你有一定的参考价值。

一、简介

RabbitMQ是一套开源(MPL)的消息队列服务软件,是由LShift提供的一个Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、健壮以及可伸缩性出名的Erlang写成。所有主要的编程语言均有与代理接口通讯的客户端库。RabbitMQ由Rabbit科技有限公司开发,并提供对其的支持。起初,Rabbit科技是LSHIFT和CohesiveFT在2007年成立的合资企业,2010年4月被VMware旗下的SpringSource收购。RabbitMQ在2013年5月成为GoPivotal的一部分。

AMQP:高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。RabbitMQ是一个开源的AMQP实现,服务端用erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS,支持AJAX等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现较好。

二、rabbitmq特性

1、可靠性(Reliability)
rabbitmq使用一些机制来保证可靠性,如持久化、传输确认、发布确认。

2、灵活的路由(Flexible Routing)
在消息进入队列之前,是通过Exchange来路由信息的。对于典型的路由功能,rabbitmq已经提供了一些内置的Exchange来实现。针对更复杂的路由功能,可以将多个Exchange绑定在一起,也可以通过插件机制实现自己的Exchange。

3、消息集群(Clustering)
多个RabbitMQ服务器可以组成一个集群,形成一个逻辑Broker(服务)。

4、高可用(Highly Available)
队列可以在集群中的机器上进行镜像,使得在部分节点出问题的情况下队列仍然可用,也就是具有可伸缩性。

5、多种协议(Multi-protocol)
rabbitmq支持多种消息队列协议,如STOMP、MQIT等。

6、多语言客户端(Many Clients)
rabbitmq几乎支持所有的常用语言,如Java、.net、Ruby、Python等。

7、管理界面(Mangement UI)
rabbitmq提供了一个易用的用户界面,使得用户可以监控和管理消息Broker的许多方面。

8、跟踪机制(Tracing)
如果消息异常,rabbitmq提供了消息跟踪机制,使用者可以找出发生了什么。

9、插件机制(Plugin System)
rabbitmq提供了许多插件来从多方面进行扩展,使用者也可以编写自己的插件。

参考博文:https://segmentfault.com/a/1190000019122774?utm_source=tag-newest


消息队列和RPC的区别与比较
RPC: 异步调用,及时获得调用结果,具有强一致性结果,关心业务调用处理结果。
消息队列:两次异步RPC调用,将调用内容在队列中进行转储,并选择合适的时机进行投递(错峰流控)。

核心概念:它是基于消息的模型,关心的是“通知”,而非“处理”。

三、使用场景

rabbitmq常见使用场景:解耦、异步、削峰
1、 解耦(为面向服务的架构(SOA)提供基本的最终一致性实现)
技术图片
技术图片

2、异步提升效率
场景说明:用户注册后,需要发注册邮件和注册短信。传统的做法有两种:串行的方式、并行方式。
技术图片

(2)并行方式:将注册信息写入数据库成功后,发送注册邮件的同时发送注册短信。以上三个任务完成后,返回给客户端。与串行的差别是,并行的方式可以减少处理的时间。
技术图片
技术图片

3、流量削峰(流量控制)
流量削锋也是消息队列中的常用场景,主要是利用消息队列来进行流量控制,一般在秒杀或团抢活动中使用广泛。

应用场景:系统其他时间A系统每秒请求量就100个,系统可以稳定运行。系统每天晚间八点有秒杀活动,每秒并发请求量增至1万条,但是系统最大的处理能力只能每秒处理1000个请求,于是系统崩溃,服务器宕机。

之前架构:大量用户(100万用户)通过浏览器在晚上八点高峰期同时参与秒杀活动。大量的请求涌入我们的系统中,高峰期达到每秒钟5000个请求,大量的请求打到mysql上,每秒钟预计执行3000条SQL。但是一般的MySQL每秒钟扛住2000个请求就不错了,如果达到3000个请求的话可能MySQL直接就瘫痪了,从而导致系统无法使用。但是高峰期过了之后,就成了低峰期,可能也就1万用户访问系统,每秒的请求数量也就50个左右,整个系统几乎没有任何压力。

引入MQ:100万用户在高峰期的时候,每秒请求有5000个请求左右,将这5000个请求写入MQ里面,系统A每秒最多只能处理2000请求,因为MySQL每秒只能处理2000个请求。系统A从MQ中慢慢拉取请求,每秒就拉取2000个请求,不要超过自己每秒能处理的请求数量即可。MQ每秒5000个请求进来,结果只有2000个请求出去,所以在秒杀期间(将近一小时)可能会有几十万或者几百万的请求积压在MQ中,并且这个短暂的高峰期积压是没问题的,因为高峰期过了之后,每秒就只有50个请求进入MQ了,但是系统还是按照每秒2000个请求的速度在处理,所以说只要高峰期一过,系统就会快速将积压的消息消费掉。我们在此计算一下,每秒在MQ积压3000条消息,1分钟会积压18万,1小时积压1000万条消息,高峰期过后,1个多小时就可以将积压的1000万消息消费掉。如下图所示:
技术图片

4、引入消息队列的优点
引入消息队列可以对系统进行解耦、在流量很大时可以进行流量控制,进行流量削峰。

5、引入消息队列的缺点

  • 系统的可用性降低
    系统引入的外部依赖越多,系统越容易挂掉,本来只是A系统调用BCD三个系统接口就好,ABCD四个系统不报错整个系统会正常运行。引入了MQ之后,虽然ABCD系统没出错,但MQ挂了以后,整个系统也会崩溃。
  • 系统的复杂性提高
    引入了MQ之后,需要考虑的问题也变得多了。例如:如何保证消息没有重复消费?如何保证消息不丢失?怎么保证消息传递的顺序?
  • 一致性问题
    A系统发送完消息直接返回成功,但是BCD系统之中若有系统写库失败,则会产生数据不一致的问题。

以上部分参见博文:https://www.cnblogs.com/haixiang/p/10199754.html

四、安装以及注意事项

1、由于RabbitMQ是使用erlang语言编写的,因此在安装rabbitmq之前需要安装erlang,需要注意的是安装路径都不要有空格。
erlang官网地址(下载比较慢):https://www.erlang.org/downloads
erlang国内下载镜像: https://www.erlang-solutions.com/resources/download.html

2、erlang环境变量设置
Erlang使用了环境变量HOMEDRIVE与HOMEPATH来访问配置文件.erlang.cookie,应注意这两个环境变量的有效性。需要设定环境变量ERLANG_HOME,并把%ERLANG_HOME%in加入到全局路径中。
环境变量的设置可参见博文:https://blog.csdn.net/weixin_40822435/article/details/105738375

3、RabbitMQ使用本地computer name作为服务器的地址,因此需要注意其有效性(不要有中文或者空格),或者直接解析为localhost / 127.0.0.1。

4、rabbitmq下载官方地址:https://www.rabbitmq.com/download.html

5、安装完成之后进入rabbitmq后台: http://localhost:15672/ 默认用户名和密码均为guest
有时候会安装失败,那么可以卸载之后重新安装,具体参见如下博文:
(1) https://blog.csdn.net/lishaojun0115/article/details/53145051 (彻底删除erlang)
(2) http://www.manongjc.com/article/17163.html (rabbitmq服务启动闪退问题解决)

6、rabbitmq安装之后没有在服务中显示RabbitMQ
在服务中没有看到RabbitMQ服务,则cmd进入rabbitmq安装sbin目录执行命令 rabbitmq-service.bat install 将rabbitmq服务安装到服务中,之后就能看到了。

五、命令行启动或关闭rabbitmq服务

前提:cmd进入rabbitmq安装目录sbin目录。
1、启动:执行 rabbitmq-server.bat start 命令启动rabbitmq服务。
2、关闭:执行 rabbitmqctl.bat stop 关闭rabbitmq服务。



































以上是关于RabbitMQ简介特性使用场景安装启动与关闭的主要内容,如果未能解决你的问题,请参考以下文章

Linux中快速搭建RabbitMQ

RabbitMQ延迟队列简单示例

RabbitMQ01_消息队列概述使用场景劣势架构图与主要概念Docker快速安装Rabbitmq角色分类

RabbitMQ01_消息队列概述使用场景劣势架构图与主要概念Docker快速安装Rabbitmq角色分类

Rabbitmq基本框架和安装

RabbitMQ