The full name of MQ is Message Queue, and Message Queue (MQ) is an application-to-application communication method. Applications communicate by reading and writing messages (application-specific data) to and from queues without requiring dedicated connections to link them. Messaging refers to programs communicating with each other by sending data in messages, rather than communicating with each other by making direct calls, which is often used for techniques such as remote procedure calls. Queuing refers to applications communicating through queues. The use of queues removes the requirement for the receiving and sending applications to execute concurrently. Among them, the more mature MQ products include IBM WEBSPHERE MQ and so on. |
Introduction to RabbitMQ
- Install RabbitMQ's message broker software and implement AMQP (Advanced Message Queuing Protocol)
- RabbitMQ tutorial: http://www.rabbitmq.com/getstarted.html
- RabbitMQ installation: http://www.rabbitmq.com/download.html
- RabbitMQ column: http://blog.csdn.net/column/details/rabbitmq.html
# 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 startup error: Failed to start RabbitMQ broker
Du Niang's analysis: The host hostname configuration error, the original hostname is vdevops.org, changed to vdevops, modify the hostname setting in the hosts file
[root@vdevops /]# hostnamectl set-hostname vdevops # hostname change restart 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/erlang-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/[email protected] Nov 12 01:32:40 vdevops rabbitmq-server[3891]: ###### ## /var/log/rabbitmq/[email protected] 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.
firewall settings
[root@linuxprobe~]# firewall-cmd --add-port=5672/tcp --permanent success [root@linuxprobe~]# firewall-cmd --reload success
To use RabbitMQ, please add a user first
[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.
To use RabbitMQ, also add a virtual host
[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.
To grant permission to the user of the virtual host, please configure as follows
# 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: Using the Web UI
[root@vdevops ~]# rabbitmq-plugins enable rabbitmq_management 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. [root@vdevops ~]# systemctl restart rabbitmq-server
client access
http://vdevops:15672/
rabbitmqadmin use
You can configure RabbitMQ to use the rabbitmqadmin command
Download rabbitmqadmin on the web UI. Log in to the Web UI and move to "http://(hostname or IP address):15672/cli", then the following screen is displayed, you can download rabbitmqadmin here, right click here to save rabbitmqadmin.txt, and then upload it to the server Change to rabbitmqadmin, and add execute permission
Upload rabbitmqadmin to the RabbitMQ server and set appropriate permissions, this example shows the following settings
[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 | +-----------+---------+
For more tutorials on rabbitmqadmin: Management Command Line Tool — RabbitMQ
[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 | +-------------+----------+---------------+-------------------+---------------+------------------+------------+-------------+