一、RabbitMQ简介
消息系统允许软件应用相互连接和扩展.这些应用可以相互链接起来组成一个更大的应用,或者将用户设备和数据进行连接.消息系统通过将消息的发送和接收分离来实现应用程序的异步和解偶.
或许你正在考虑进行数据投递,非阻塞操作或推送通知。或许你想要实现发布/订阅,异步处理,或者工作队列。所有这些都属于消息系统的模式。
RabbitMQ是一个消息代理 - 一个消息系统的媒介。它可以为你的应用提供一个通用的消息发送和接收平台,并且保证消息再传输过程中的安全。
优点:
①可靠性:RabbitMQ提供了多种技术可以让你在性能和可靠性之间进行权衡。这些技术包括持久性、投递确认、发布者证实和高可用性。
②灵活的路由:消息在到达队列前是通过交换机进行路由的。RabbitMQ为典型的路由逻辑提供了多种内置交换机类型。如果你有更复杂的路由需求,可以将这些交换机组合起来使用,甚至你可以写自己的交换机类型,并且当做RabbitMQ的插件来使用。
③集群:在相同局域网中的多个RabbitMQ服务器可以被聚合在一起,作为一个独立的逻辑代理来使用。
④联合:对于服务器来说,它比集群需要更多的松散和非可靠链接。为此RabbitMQ提供了联合模型。
⑤高可用的队列:在同一个集群中,队列可以被镜像到多个机器中,以确保当其中某些硬件出现事故后,消息仍然是安全的。
⑥多协议:RabbitMQ 支持多种消息协议中的消息传递。
⑦广泛的客户端:只要是你能想到的语言几乎都有与其相适配的RabbitMQ客户端。
⑧可视化管理工具:RabbitMQ附带了一个易于使用的可视化管理工具,它可以帮助你监控消息代理的每一个环节。
⑨追踪:如果你的消息系统有异常行为,RabbitMQ还提供了追踪的支持,让你能够发现问题所在。
⑩插件系统:RabbitMQ附带了各种各样的插件来对自己进行扩展。甚至你也可以写自己的插件来使用。
二、安装到 Debian / Ubuntu 系统中
①下载到服务器:rabbitmq-server_3.4.3-1_all.deb(Signature)
自Debian since 6.0 (squeeze) 和 Ubuntu 9.04 之后,rabbitmq-server就已经被内置其中了。然而这些被包含在内的版本往往过低。所以从我们网站上下载 .deb 文件来安装可以达到更好的效果。查看 Debian安装包 和 Ubuntu安装包 来确认适用于指定发行版的可用版本。
你可以使用dpkg
来安装从上边下载来的安装包,也可以使用我们的APT库(下边介绍)。
所有的依赖都会被自动安装。
②运行RabbitMQ服务器
自定义RabbitMQ环境变量
服务器会以默认方式启动。你可以自定义RabbitMQ的环境。也可以查看如何配置组件。
开启服务器
当RabbitMQ安装完毕的时候服务器就会像后台程序一般运行起来了。作为一个管理员,可以像平常一样在Debian中使用以下命令启动和关闭服务
invoke-rc.d rabbitmq-server stop/start/etc.
注意:服务器是使用rabbitmq
这个系统用户来运行的。如果你改变了Mnesia数据库或者日志的位置,那么你必须确认这些文件属于此用户(同时更新系统变量)。
使用APT库:
将以下的行添加到你的 /etc/apt/sources.list 文件中:
deb http://www.rabbitmq.com/debian/ testing main
(请注意上边行中的 testing 指的是RabbitMQ发行状态,而不是指特定的Debian发行版。你可以将它使用在Debain的稳定版、测试版、非稳定版本中。对Ubuntu来说也是如此。我们之所以将版本描述为 testing 这个词是为了强调我们会频繁发布一些新的东西。)
(可选的)为了避免未签名的错误信息,请使用apt-key(8)命令将我们的公钥添加到你的可信任密钥列表中:
wget http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
sudo apt-key add rabbitmq-signing-key-public.asc
运行
apt-get update
像平常一样安装软件包即可;例如
sudo apt-get install rabbitmq-server
控制系统限制
如果要调整系统限制(尤其是打开文件的句柄的数量)的话,可以通过编辑 /etc/default/rabbitmq-server 文件让服务启动的时候调用ulimit,例如:
ulimit -n 1024
这将会设置此服务打开文件句柄的最大数量为1024个(这也是默认设置)。
安全和端口
SELinux和类似机制或许会通过绑定端口的方式阻止RabbitMQ。当这种情况发生时,RabbitMQ会启动失败。请确认以下的端口是可以被打开的:
-
4369 (epmd), 25672 (Erlang distribution)
-
5672, 5671 (启用了 或者 未启用 TLS 的 AMQP 0-9-1)
-
15672 (如果管理插件被启用)
-
61613, 61614 (如果 STOMP 被启用)
-
1883, 8883 (如果 MQTT 被启用)
默认用户访问
代理会建立一个用户名为“guest”密码为“guest”的用户。未经配置的客户端通常会使用这个凭据。默认情况下,这些凭据只能在链接到本机上的代理时使用,所以在链接到其他设备的代理之前,你需要做一些事情。
查看访问控制,了解如何新建更多的用户,删除“guest”用户或者给“guest”用户赋予远程访问权限。
管理代理
如果想要停止或者查看服务器状态等,你可以调用rabbitmqctl
(在管理员权限下)。如果没有任何代理在运行,所有的rabbitmqctl命令都会给出“结点未找到”的报告。
-
调用
rabbitmqctl stop
来关闭服务器。 -
调用
rabbitmqctl status
来查看代理是否运行。
更多信息请查看 rabbitmqctl 信息
日志
服务器的输出被发送到 RABBITMQ_LOG_BASE 目录的 RABBITMQ_NODENAME.log 文件中。一些额外的信息会被写入到 RABBITMQ_NODENAME-sasl.log 文件中。
代理总是会把新的信息添加到日志文件尾部,所以完整的日志历史可以被保存下来。
你可以使用 logrotate 程序来执行必要的循环和压缩工作,并且你还可以更改它。默认情况下,这个位于 /var/log/rabbitmq 文件中的脚本会每周执行一次。你可以查看 /etc/logrotate.d/rabbitmq-server 来对 logrotate 进行配置。