Windows下RabbitMQ安装及注意事项
Windows下RabbitMQ安装及注意事项
简介
背景
1. RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现。
RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。RabbitMQ主要是为了实现系统之间的双向解耦而实现的。当生产者大量产生数据时,消费者无法快速消费,那么需要一个中间层。保存这个数据。
2. RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用。(消息中间件最主要的作用是解耦,中间件最标准的用法是生产者生产消息传送到队列,消费者从队列中拿取消息并处理,生产者不用关心是谁来消费,消费者不用关心谁在生产消息,从而达到解耦的目的。在分布式的系统中,消息队列也会被用在很多其它的方面,比如:分布式事务的支持,RPC的调用等等。)
扩展:AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全
场景
1、跨系统的异步通信,所有需要异步交互的地方都可以使用消息队列。就像我们除了打电话(同步)以外,还需要发短信,发电子邮件(异步)的通讯方式。
2、多个应用之间的耦合,由于消息是平台无关和语言无关的,而且语义上也不再是函数调用,因此更适合作为多个应用之间的松耦合的接口。基于消息队列的耦合,不需要发送方和接收方同时在线。在企业应用集成(EAI)中,文件传输,共享数据库,消息队列,远程过程调用都可以作为集成的方法。
3、应用内的同步变异步,比如订单处理,就可以由前端应用将订单信息放到队列,后端应用从队列里依次获得消息处理,高峰时的大量订单可以积压在队列里慢慢处理掉。由于同步通常意味着阻塞,而大量线程的阻塞会降低计算机的性能。
4、消息驱动的架构(EDA),系统分解为消息队列,和消息制造者和消息消费者,一个处理流程可以根据需要拆成多个阶段(Stage),阶段之间用队列连接起来,前一个阶段处理的结果放入队列,后一个阶段从队列中获取消息继续处理。
5、应用需要更灵活的耦合方式,如发布订阅,比如可以指定路由规则。
6、跨局域网,甚至跨城市的通讯(CDN行业),比如北京机房与广州机房的应用程序的通信。
准备工作
otp_win64_20.3.exe
rabbitmq-server-3.7.4.exe
安装过程
介绍了RabbitMQ背景和使用场景,那我们来实现一下:
首先 我们去官网下载一个rabbitmq,我用的是windows系统,以windows系统按住为例:
1. 打开http://www.rabbitmq.com/ 官网,进入Docs页面进入下载页面
2. In This Section 这一块内容我们可以看到Install: Windows 我们点击进去可以看到有这样一句话
首先,您需要安装支持的 Windows 版Erlang。下载并运行Erlang for Windows 安装程序。强烈建议使用64位版本。重要说明:您必须使用管理帐户运行Erlang安装程序,否则RabbitMQ安装程序预期的注册表项将不存在。
然后,运行RabbitMQ安装程序rabbitmq-server-3.7.4.exe。它将RabbitMQ安装为Windows服务并使用默认配置启动它。
3. 所以我们在安装rabbitmq需要安装一个Erlang 官网地址:http://www.erlang.org/downloads
4. 安装otp_win64_20.3.exe 双击.exe文件进行安装就好,直接下一步完成就好。
5. 然后安装rabbitmq-server-3.7.4.exe双击.exe文件进行安装就好,直接下一步完成就好。
6. 输入:rabbitmq-plugins enablerabbitmq_management命令,出现plugins安装成功的提示。
7. 安装完成后 打开http://localhost:15672 可以看到
输入账号/密码:guest/ guest后进入
注意事项
当然,上面的安装过程是一个理想中的状态,我在安装过程中没有那么顺利,遇到各种错啊,心态差点崩掉!!!
问题一:
先上图
我们可以看到遇到这个错误 (ArgumentError)argument error (stdlib) io_lib.erl:170: :io_lib.format(' * effective user\'shome directory: ~s~n' 试了好多遍,找了好多资料,重装了一遍,还是不行 最后发现了这一篇文章:https://stackoverflow.com/questions/49376049/rabbitmq-argumenterror-argument-error
有这样一句话 Actually,my computer's username used to be chinese and now Ichange it to english,it also doesn't work.Now I think my path hasn't non-ASCIIcharactor.
大致意思是说:实际上,我的计算机的用户名曾经是中文,现在我将其更改为英文,但它也不起作用。现在我认为我的路径没有非ASCII字符。
这个我在想是不是也是因为我文件路径是中文的缘故,读取不到地址,所以我就把计算机的名字改掉了,改成了英文字符。(改的过程也不是那么顺利,看着网上一步一步走,结果,用户密码改的不对了,试了好多遍,哎没办法,我重装系统了重装系统了啊!!!)
系统重新装好之后有安装了一遍这个时候又出现了问题。
问题二:
安装好之后,访问网址http://localhost:15672访问不通。
最后解决方案:首先在命令行输入:rabbitmq-servicestop,接着输入rabbitmq-service remove,再接着输入rabbitmq-serviceinstall,接着输入rabbitmq-service start,最后重新输入rabbitmq-plugins enable rabbitmq_management试试
完美,执行成功!
rabbitMQ 常用命令
简单的列一下常用命令,方便以后用:
启动监控管理器:rabbitmq-plugins enable rabbitmq_management
关闭监控管理器:rabbitmq-plugins disable rabbitmq_management
启动rabbitmq:rabbitmq-service start
关闭rabbitmq:rabbitmq-service stop
查看所有的队列:rabbitmqctl list_queues
清除所有的队列:rabbitmqctl reset
关闭应用:rabbitmqctl stop_app
启动应用:rabbitmqctl start_app
用户和权限设置(后面用处)
添加用户:rabbitmqctl add_user username password
分配角色:rabbitmqctl set_user_tags username administrator