共计 9737 个字符,预计需要花费 25 分钟才能阅读完成。
导读 | MQ 全称为 Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。其中较为成熟的 MQ 产品有 IBM WEBSPHERE MQ 等等。 |
RabbitMQ 简介
- 安装 RabbitMQ 的消息代理软件, 实现了 AMQP(高级消息队列协议)
- RabbitMQ 教程:http://www.rabbitmq.com/getstarted.html
- RabbitMQ 安装:http://www.rabbitmq.com/download.html
- RabbitMQ 专栏:http://blog.csdn.net/column/details/rabbitmq.html
RabbitMQ 安装
# Install from EPEL | |
[root@vdevops~]# yum --enablerepo=epel -y install rabbitmq-server | |
[root@vdevops~]# systemctl start rabbitmq-server | |
[root@vdevops /]# journalctl -xe | |
Nov 12 01:30:01 vdevops.org CROND[3856]: (root) CMD (/usr/lib64/sa/sa1 1 1) | |
Nov 12 01:30:04 vdevops.org rabbitmqctl[3831]: DIAGNOSTICS | |
Nov 12 01:30:04 vdevops.org rabbitmqctl[3831]: =========== | |
Nov 12 01:30:04 vdevops.org rabbitmqctl[3831]: attempted to contact: [rabbit@vdevops] | |
Nov 12 01:30:04 vdevops.org rabbitmqctl[3831]: rabbit@vdevops: | |
Nov 12 01:30:04 vdevops.org rabbitmqctl[3831]: * unable to connect to epmd (port 4369) on vdevops: timeout (timed out) | |
Nov 12 01:30:04 vdevops.org rabbitmqctl[3831]: current node details: | |
Nov 12 01:30:04 vdevops.org rabbitmqctl[3831]: - node name: rabbitmqctl3831@vdevops | |
Nov 12 01:30:04 vdevops.org rabbitmqctl[3831]: - home dir: /var/lib/rabbitmq | |
Nov 12 01:30:04 vdevops.org rabbitmqctl[3831]: - cookie hash: s++dDMtIhAufFItw+ercBw== | |
Nov 12 01:30:04 vdevops.org polkitd[1007]: Unregistered Authentication Agent for unix-process:3798:36632 (system bus name :1.23, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8) (disconnected f | |
Nov 12 01:30:04 vdevops.org systemd[1]: rabbitmq-server.service: control process exited, code=exited status=2 | |
Nov 12 01:30:04 vdevops.org systemd[1]: Failed to start RabbitMQ broker. | |
-- Subject: Unit rabbitmq-server.service has failed | |
-- Defined-By: systemd | |
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel | |
-- | |
-- Unit rabbitmq-server.service has failed. | |
-- | |
-- The result is failed. | |
Nov 12 01:30:04 vdevops.org systemd[1]: Unit rabbitmq-server.service entered failed state. | |
Nov 12 01:30:04 vdevops.org systemd[1]: rabbitmq-server.service failed. | |
Nov 12 01:30:42 vdevops.org systemd[1]: Got automount request for /proc/sys/fs/binfmt_misc, triggered by 3860 (find) | |
Nov 12 01:30:42 vdevops.org systemd[1]: Mounting Arbitrary Executable File Formats File System... | |
-- Subject: Unit proc-sys-fs-binfmt_misc.mount has begun start-up | |
-- Defined-By: systemd | |
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel | |
-- | |
-- Unit proc-sys-fs-binfmt_misc.mount has begun starting up. | |
Nov 12 01:30:42 vdevops.org systemd[1]: Mounted Arbitrary Executable File Formats File System. | |
-- Subject: Unit proc-sys-fs-binfmt_misc.mount has finished start-up | |
-- Defined-By: systemd | |
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel | |
-- | |
-- Unit proc-sys-fs-binfmt_misc.mount has finished starting up. | |
-- | |
-- The start-up result is done. |
rabbitmq-server 启动报错:Failed to start RabbitMQ broker
度娘解析:主机 hostname 配置错误,原本 hostname 为 vdevops.org, 更改为 vdevops,修改 hosts 文件中 hostname 设置
[root@vdevops /]# hostnamectl set-hostname vdevops # hostname 更改重启启动 rabbitmq-server | |
[root@vdevops /]# systemctl status rabbitmq-server | |
● rabbitmq-server.service - RabbitMQ broker | |
Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; disabled; vendor preset: disabled) | |
Active: active (running) since Sat 2016-11-12 01:32:41 CST; 3min 58s ago | |
Process: 3831 ExecStop=/usr/lib/rabbitmq/bin/rabbitmqctl stop (code=exited, status=2) | |
Main PID: 3891 (beam) | |
CGroup: /system.slice/rabbitmq-server.service | |
├─3891 /usr/lib64/erlang/erts-5.10.4/bin/beam -W w -K true -A30 -P 1048576 -- -root /usr/lib64/erlang -progname erl -- -home /var/lib/rabbitmq -- -pa /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/sbin/../ebin -nos... | |
├─3908 /usr/lib64/erlang/erts-5.10.4/bin/epmd -daemon | |
├─3963 inet_gethost 4 | |
└─3964 inet_gethost 4 | |
Nov 12 01:32:39 vdevops systemd[1]: Starting RabbitMQ broker... | |
Nov 12 01:32:39 vdevops systemd[1]: rabbitmq-server.service: Got notification message from PID 3908, but reception only permitted for main PID 3891 | |
Nov 12 01:32:40 vdevops rabbitmq-server[3891]: RabbitMQ 3.3.5. Copyright (C) 2007-2014 GoPivotal, Inc. | |
Nov 12 01:32:40 vdevops rabbitmq-server[3891]: ## ## Licensed under the MPL. See http://www.rabbitmq.com/ | |
Nov 12 01:32:40 vdevops rabbitmq-server[3891]: ## ## | |
Nov 12 01:32:40 vdevops rabbitmq-server[3891]: ########## Logs: /var/log/rabbitmq/rabbit@vdevops.log | |
Nov 12 01:32:40 vdevops rabbitmq-server[3891]: ###### ## /var/log/rabbitmq/rabbit@vdevops-sasl.log | |
Nov 12 01:32:40 vdevops rabbitmq-server[3891]: ########## | |
Nov 12 01:32:41 vdevops systemd[1]: Started RabbitMQ broker. | |
Nov 12 01:32:41 vdevops rabbitmq-server[3891]: Starting broker... completed with 0 plugins. | |
[root@vdevops~]# systemctl enable rabbitmq-server | |
Created symlink from /etc/systemd/system/multi-user.target.wants/rabbitmq-server.service to /usr/lib/systemd/system/rabbitmq-server.service. |
防火墙设置
[ | ]|
success | |
[ | ]|
success |
要使用 RabbitMQ,请先添加用户
[root@vdevops ~]# rabbitmqctl add_user linuxprobe password | |
Creating user "linuxprobe" ... | |
...done. | |
[root@vdevops ~]# rabbitmqctl list_users | |
Listing users ... | |
guest [administrator] | |
linuxprobe [] | |
...done. | |
# granting admin role to a user is like follows | |
[root@vdevops ~]# rabbitmqctl change_password linuxprobe strongpassword | |
Changing password for user "linuxprobe" ... | |
...done. | |
# granting admin role to a user is like follows | |
[root@vdevops ~]# rabbitmqctl set_user_tags linuxprobe administrator | |
Setting tags for user "linuxprobe" to [administrator] ... | |
...done. | |
# deleting a user is like follows | |
[root@vdevops ~]# rabbitmqctl delete_user linuxprobe | |
Deleting user "linuxprobe" ... | |
...done. |
要使用 RabbitMQ,也要添加虚拟主机
[root@vdevops ~]# rabbitmqctl add_vhost /my_vhost | |
Creating vhost "/my_vhost" ... | |
...done. | |
[root@vdevops ~]# rabbitmqctl list_vhosts | |
Listing vhosts ... | |
/ | |
/my_vhost | |
...done. | |
[root@vdevops ~]# rabbitmqctl delete_vhost /my_vhost | |
Deleting vhost "/my_vhost" ... | |
...done. |
给虚拟主机的用户授予权限,请如下配置
# rabbitmqctl set_permissions [-p vhost] [user] [permission ? (modify) (write) (read)] | |
[root@vdevops ~]# rabbitmqctl set_permissions -p /my_vhost linuxprobe ".*" ".*" ".*" | |
Setting permissions for user "linuxprobe" in vhost "/my_vhost" ... | |
...done. | |
# | |
[root@vdevops ~]# rabbitmqctl list_user_permissions linuxprobe | |
Listing permissions for user "linuxprobe" ... | |
/my_vhost .* .* .* | |
...done. | |
# deleting permission of a specific user is like follows | |
[root@vdevops ~]# rabbitmqctl clear_permissions -p /my_vhost linuxprobe | |
Clearing permissions for user "linuxprobe" in vhost "/my_vhost" ... | |
...done. |
RabbitMQ:使用 Web UI
[ | ]|
The following plugins have been enabled: | |
mochiweb | |
webmachine | |
rabbitmq_web_dispatch | |
amqp_client | |
rabbitmq_management_agent | |
rabbitmq_management | |
Plugin configuration has changed. Restart RabbitMQ for changes to take effect. | |
[ | ]
客户端访问
http://vdevops:15672/
rabbitmqadmin 使用
可以配置 RabbitMQ 使用 rabbitmqadmin 命
在 Web UI 上下载 rabbitmqadmin。登录到 Web UI 并移动到“http://(主机名或 IP 地址):15672 / cli”,然后显示以下屏幕,您可以在这里下载 rabbitmqadmin,点击 here 右键保存 rabbitmqadmin.txt,然后上传到服务器上面更改为 rabbitmqadmin,并添加执行权限
将 rabbitmqadmin 上传到 RabbitMQ 服务器并设置合适的权限,此示例显示如下设置
[root@localhost ~]# ll /usr/local/bin/rabbitmqadmin | |
-rwxr-xr-x. 1 root root 36112 Nov 11 17:23 /usr/local/bin/rabbitmqadmin | |
[root@vdevops bin]# rabbitmqadmin list users | |
+------------+------------------------------+---------------+ | |
| name | password_hash | tags | | |
+------------+------------------------------+---------------+ | |
| guest | k2rhpzCrZBKkY5WRhUWrGm5DCkg= | administrator | | |
| linuxprobe | P+YxK1QXIYrJpek5i//rPjn5SME= | administrator | | |
+------------+------------------------------+---------------+ | |
[root@vdevops bin]# cd | |
[root@vdevops ~]# rabbitmqadmin list users | |
+------------+------------------------------+---------------+ | |
| name | password_hash | tags | | |
+------------+------------------------------+---------------+ | |
| guest | k2rhpzCrZBKkY5WRhUWrGm5DCkg= | administrator | | |
| linuxprobe | P+YxK1QXIYrJpek5i//rPjn5SME= | administrator | | |
+------------+------------------------------+---------------+ | |
[root@vdevops ~]# rabbitmqadmin list vhosts | |
+-----------+---------+ | |
| name | tracing | | |
+-----------+---------+ | |
| / | False | | |
| /my_vhost | False | | |
+-----------+---------+ |
rabbitmqadmin 更多使用教程参考:http://www.rabbitmq.com/management-cli.html
[root@vdevops ~]# rabbitmqadmin declare user name=centos password=password tags=administrator | |
user declared | |
[root@vdevops ~]# rabbitmqadmin declare permission vhost=/vhost01 user=centos configure=".*" write=".*" read=".*" | |
*** vhost_or_user_not_found | |
[root@vdevops ~]# rabbitmqadmin declare vhost name=/vhost01 | |
vhost declared | |
[root@vdevops ~]# rabbitmqadmin declare permission vhost=/vhost01 user=centos configure=".*" write=".*" read=".*" | |
permission declared | |
[root@vdevops ~]# rabbitmqadmin -V /vhost01 -u centos -p password declare queue name=my_queue01 | |
queue declared | |
[root@vdevops ~]# rabbitmqadmin -V /vhost01 -u centos -p password publish routing_key=my_queue01 payload='Hello RabbitMQ World!' exchange=amq.default | |
Message published | |
[root@vdevops ~]# rabbitmqadmin -V /vhost01 -u centos -p password get queue=my_queue01 requeue=false | |
+-------------+----------+---------------+-----------------------+---------------+------------------+------------+-------------+ | |
<>| routing_key | exchange | message_count | payload | payload_bytes | payload_encoding | properties | redelivered | | |
+-------------+----------+---------------+-----------------------+---------------+------------------+------------+-------------+ | |
| my_queue01 | | 0 | Hello RabbitMQ World! | 21 | string | | False | | |
+-------------+----------+---------------+-----------------------+---------------+------------------+------------+-------------+ | |
[root@vdevops ~]# rabbitmqadmin -V /vhost01 -u centos -p password publish routing_key=my_queue01 payload='Hello LinuxProbe!' exchange=amq.default | |
Message published | |
[root@vdevops ~]# rabbitmqadmin -V /vhost01 -u centos -p password get queue=my_queue01 requeue=false | |
+-------------+----------+---------------+-------------------+---------------+------------------+------------+-------------+ | |
| routing_key | exchange | message_count | payload | payload_bytes | payload_encoding | properties | redelivered | | |
+-------------+----------+---------------+-------------------+---------------+------------------+------------+-------------+ | |
| my_queue01 | | 0 | Hello LinuxProbe! | 17 | string | | False | | |
+-------------+----------+---------------+-------------------+---------------+------------------+------------+-------------+ |
正文完
星哥玩云-微信公众号
