RabbitMQ介绍
RabbitMQ是一个由 Erlang (一种通用的面向并发的编程语言)开发的AMQP(Advanced Message Queue )的开源实现,Rabbit MQ 是建立在Erlang OTP平台上。AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准(如 COBAR的 IIOP ,或者是 SOAP 等),但是在异步消息处理中却不是这样,只有大企业有一些商业实现(如微软的 MSMQ ,IBM 的 Websphere MQ 等),因此,在 2006 年的 6 月,Cisco 、Redhat、iMatix 等联合制定了 AMQP 的公开标准。
RabbitMQ是由RabbitMQ Technologies Ltd开发并且提供商业支持的。该公司在2010年4月被SpringSource(VMWare的一个部门)收购。在2013年5月被并入Pivotal。其实VMWare,Pivotal和EMC本质上是一家的。不同的是VMWare是独立上市子公司,而Pivotal是整合了EMC的某些资源,现在并没有上市。
应用场景
言归正传。RabbitMQ,或者说AMQP解决了什么问题,或者说它的应用场景是什么?
对于一个大型的软件系统来说,它会有很多的组件或者说模块或者说子系统或者(subsystem or Component or submodule)。那么这些模块的如何通信?这和传统的IPC有很大的区别。传统的IPC很多都是在单一系统上的,模块耦合性很大,不适合扩展(Scalability);如果使用socket那么不同的模块的确可以部署到不同的机器上,但是还是有很多问题需要解决。比如:
1)信息的发送者和接收者如何维持这个连接,如果一方的连接中断,这期间的数据如何方式丢失?
2)如何降低发送者和接收者的耦合度?
3)如何让Priority高的接收者先接到数据?
4)如何做到load balance?有效均衡接收者的负载?
5)如何有效的将数据发送到相关的接收者?也就是说将接收者subscribe 不同的数据,如何做有效的filter。
6)如何做到可扩展,甚至将这个通信模块发到cluster上?
7)如何保证接收者接收到了完整,正确的数据?
AMQP协议解决了以上的问题,而RabbitMQ实现了AMQP。
安装Erlang
所以在安装rabbitMQ之前,需要先安装Erlang 。可以去官网下载。全部点击“下一步”就行。安装后路径:C:\Program Files\erl10.0.1
设置环境变量ERLANG_HOME= C:\Program Files\erlx.x.x
添加到PATH %ERLANG_HOME%\bin;
安装RabbitMQ
可以去官网下载。依旧可以不改变默认进行安装。C:\Program
Files\RabbitMQ Server\rabbitmq_server-3.7.7
需要注意:默认安装的RabbitMQ 监听端口是5672
设置环境变量RABBITMQ_SERVER=C:\Program
Files\rabbitmq_server-x.x.x。
添加到PATH %RABBITMQ_SERVER%\sbin;
4369 – erlang发现口
5672 –client端通信口
15672 – 管理界面ui端口
25672 – server间内部通信口
安装好之后的目录结构为:C:\Program
Files\RabbitMQ Server\rabbitmq_server-3.7.7
其中“sbin”下放置的是常用指令:
常用指令:
rabbitmq-plugins
enable rabbitmq_management 开启插件
rabbitmq-service
remove 移除服务
rabbitmq-service
install 安装服务
rabbitmq-service
start 或者 net start rabbitmq 启动服务
rabbitmq-service
stop 或者 net stop rabbitmq 停止服务
rabbitmqctl
status 查看服务状态
rabbitmq-server
restart 重启服务
配置
激活 RabbitMQ's
Management Plugin
使用RabbitMQ 管理插件,可以更好的可视化方式查看Rabbit MQ 服务器实例的状态。
打开命令窗口,输入命令:
"C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.5\sbin\rabbitmq-plugins.bat" enable rabbitmq_management
这样,就安装好插件了,是不是能使用了呢?别急,需要重启服务才行。
【在 运行 services.msc中可以重启】
创建用户,密码,绑定角色
使用rabbitmqctl控制台命令(位于C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.5\sbin>)来创建用户,密码,绑定权限等。
注意:安装路径不同的请看仔细啊。
rabbitmq的用户管理包括增加用户,删除用户,查看用户列表,修改用户密码。
查看已有用户及用户的角色:rabbitmqctl.bat list_users
(需要添加了 环境变量)
新增一个用户:rabbitmqctl.bat add_user username password
此时来看下我们当前用户:
eric 后面没有“[administrator]”
这个administrator是干嘛用的呢?这就涉及到用户角色问题了:
按照我个人理解,rabbitmq用户角色可分为五类:
超级管理员(administrator), 监控者(monitoring), 策略制定者(policymaker), 普通管理者(management)以及其他。
我们也给 eric 变成 “超级管理员” 角色:
rabbitmqctl.bat set_user_tags username administrator
再看下结果。
现在总觉得guest 这个不安全(它的默认密码是guest),想更改密码,好办:rabbitmqctl change_password userName newPassword
有的人也许会说,我就是看guest不爽,老子新增了administrator用户了,就是想干掉它,可以:rabbitmqctl.bat delete_user username
管理界面
使用浏览器打开http://localhost:15672访问Rabbit Mq的管理控制台,使用刚才创建的账号登陆系统。
除了可查看所有的信息 ,上面的命令 增删改查、权限设置,都可以在这个页面完成,还可以依据业务需求设置策略(policy)。
创建Virtual Hosts
设置不同角色对于虚拟路径的权限,这样可以让不同的角色管理不同的虚拟路径,并且有相应权限:
添加Virtual Hosts(可以理解成一个数据库,类似于mysql、oracle之类的)
添加成功后,点击Name“/jack”设置权限:
回到“Users”选项下,可以看到jack的权限:
以上就是RabbitMQ的安装和初始化操作。