RabbitMQ快速入门实战
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.Rabbit概述
1.什么是消息队列
| 特性对比 | AMQP | JMS |
|---|---|---|
| 七层网络模型 | 传输层和会话层 | 应用层 |
| 支持的编程语言和平台 | 支持多种编程语言和平台,包括Java,C++,Python等。 | 针对Java平台,因此在其他编程语言和平台上的支持相对较少。 |
| 传输协议 | 二进制协议进行消息传递,提供了高效,可靠的消息投递机制。 | 使用一种面向文本的协议(如HTTP/TCP)消息传递效率可能较低。 |
| 消息模型 | 支持多种消息模型,包括点对点(P2P)和发布订阅(Pub/Sub)。 | 主要支持对点(P2P)和发布订阅(Pub/Sub)模型。 |
| 可靠性 | 提供了强大的可靠性保证,包括消息持久化,事务性消息和消息确认机制。 | 支持消息持久化和事务性消息,但具体实现取决于消息传递系统的提供者。 |
| 扩展性和兼容性 | 很好的扩展性和兼容性,可以在不同的消息代理之间交互操作。 | 在Java环境中有较好的扩展性和兼容性,但在非Java环境集成时受到限制。 |
消息队列是实现应用程序和应用程序之间通信的中间件产品。
由于消息队列执行的是跨应用的信息传递,所以制定底层通信标准非常必要。
目前主流的消息队列通信协议标准包括:(具体对比参数如上表所示)
- Advanced Message Queuing Protocol(AMQP):
通用协议,由IBM公司研发。
- Java Message Service(JMS):
专门为Java语言服务,SUN公司研发,一组由Java接口组成的Java标准。
2.主流MQ产品对比
| RabbitMQ | Kafka | RocketMQ | ActiveMQ | |
|---|---|---|---|---|
| 研发团队 | Rabbit(公司性质) | Apache(社区) | 阿里(公司) | Apache(社区) |
| 开发语言 | Erlang | Scala&Java | Java | Java |
| 核心机制 | 基于AMQP的消息队列模型,使用生产者-消费者模式,将消息发布到队列中,然后被消费者订阅和处理。 | 分布式流平台,通过发布/订阅模型进行高吞吐量的消息处理。 | 分布式的消息队列模型,采用topic,tag的方式进行消息分类和过滤。 | 基于JMS的消息传递模型,支持点对点和发布订阅模式。 |
| 协议支持 | XMPP|STOMP|SMTP | 自定义协议,社区封装了HTTP协议支持。 | 自定义协议 | XMPP|STOMP|OpenWire|REST |
| 客户端支持语言 | 官方支持Erlang,Java,Ruby等,社区产出多种API,几乎支持所有语言。 | 官方支持Java,社区产出多种API,如PHP,Python,Go等。 | Java,C++ | Java,C,C++,Python,PHP,Perl,".NET"等。 |
| 可用性 | 镜像队列,仲裁队列 | 分区,副本 | 主从复制 | 主从复制 |
| 单机吞吐量 | 10w/s | 100w/s | 10w+/s(有双十一案例支撑) | 10w-/s |
| 消息延迟 | 微妙级 | 毫秒级 | 毫秒级 | 毫秒级 |
| 消息确认 | 完整的消息确认机制 | N/A | 内置消息表,消息保存到数据库实现持久化。 | N/A |
| 功能特性 | 并发能力好,性能高,延迟低,社区活跃,管理界面丰富。 | 只支持主要的MQ功能,毕竟是专门为大数据领域服务的 | MQ功能比较完备,扩展性较好。 | 老牌产品,成熟度高,文档丰富。 |
目前市面上主流的MQ包括但不限于: RabbitMQ,Kafka,RocketMQ,ActiveMQ等。
各产品对比的详细信息如上表所示。
3.什么是RabbitMQ
RabbitMQ的历史可以追溯到2005年,它是一块非常老牌的MQ产品,使用非常广泛,基于AMQP,由Erlang语言开发的消息队列产品,2007年Rabbit技术公司发布了它的1.0版本。
同时期的很多产品已经被业界淘汰了,比如2003年诞生的ActiveMQ,2012年诞生的ZeroMQ,但是RabbitMQ却依然稳稳占据一席之地,可足见他的经典。
官网地址:
https://www.rabbitmq.com/
Github地址:
https://github.com/rabbitmq/rabbitmq-server
二.部署RabbitMQ
1.部署RabbitMQ

参考链接:
https://www.rabbitmq.com/docs/install-debian#manual-installation
https://www.rabbitmq.com/docs/install-debian#add-a-repository-apt-source-list-file
http://www.rabbitmq.com/clustering.html#single-machine
简化官方安装步骤,具体操作如下:
1.编写脚本
[root@worker233 ~]# cat install-rabbitmq.sh
#!/bin/bash
# email: y1053419035@qq.com
# Blog: https://www.cnblogs.com/yinzhengjie
sudo apt-get update -y
sudo apt-get install curl gnupg -y
sudo apt-get install apt-transport-https
sudo apt-get install curl gnupg apt-transport-https -y
## Team RabbitMQ's main signing key
curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null
## Community mirror of Cloudsmith: modern Erlang repository
curl -1sLf https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg > /dev/null
## Community mirror of Cloudsmith: RabbitMQ repository
curl -1sLf https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.9F4587F226208342.gpg > /dev/null
sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
## Provides modern Erlang/OTP releases from a Cloudsmith mirror
##
deb [arch=amd64 signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.rabbitmq.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.rabbitmq.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
# another mirror for redundancy
deb [arch=amd64 signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa2.rabbitmq.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa2.rabbitmq.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
## Provides RabbitMQ from a Cloudsmith mirror
##
deb [arch=amd64 signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.rabbitmq.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.rabbitmq.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
# another mirror for redundancy
deb [arch=amd64 signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa2.rabbitmq.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa2.rabbitmq.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
EOF
sudo apt-get update -y
## Install Erlang packages
sudo apt-get install -y erlang-base \
erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \
erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \
erlang-runtime-tools erlang-snmp erlang-ssl \
erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl
## Install rabbitmq-server and its dependencies
sudo apt-get install rabbitmq-server -y --fix-missing
# start plugin
rabbitmq-plugins enable rabbitmq_management
rabbitmq-plugins list
ss -ntl | grep 5672
# init user
rabbitmqctl add_user admin yinzhengjie
rabbitmqctl set_user_tags admin administrator
rabbitmqctl delete_user guest
rabbitmqctl list_users
# 访问链接
HOST_IP=`hostname -I | awk '{print $1}'`
echo -e "链接地址: \E[32;1mhttp://${HOST_IP}:15672/\E[0m"
echo -e "用户: \E[32;1madmin\E[0m"
echo -e "密码: \E[32;1myinzhengjie\E[0m"
[root@worker233 ~]#
2.一键部署
[root@worker233 ~]# bash install-rabbitmq.sh
...
Applying plugin configuration to rabbit@worker233...
The following plugins have been enabled:
rabbitmq_management
rabbitmq_management_agent
rabbitmq_web_dispatch
started 3 plugins.
Listing plugins with pattern ".*" ...
Configured: E = explicitly enabled; e = implicitly enabled
| Status: * = running on rabbit@worker233
|/
[ ] rabbitmq_amqp1_0 4.0.6
[ ] rabbitmq_auth_backend_cache 4.0.6
[ ] rabbitmq_auth_backend_http 4.0.6
[ ] rabbitmq_auth_backend_ldap 4.0.6
[ ] rabbitmq_auth_backend_oauth2 4.0.6
[ ] rabbitmq_auth_mechanism_ssl 4.0.6
[ ] rabbitmq_consistent_hash_exchange 4.0.6
[ ] rabbitmq_event_exchange 4.0.6
[ ] rabbitmq_federation 4.0.6
[ ] rabbitmq_federation_management 4.0.6
[ ] rabbitmq_federation_prometheus 4.0.6
[ ] rabbitmq_jms_topic_exchange 4.0.6
[E*] rabbitmq_management 4.0.6
[e*] rabbitmq_management_agent 4.0.6
[ ] rabbitmq_mqtt 4.0.6
[ ] rabbitmq_peer_discovery_aws 4.0.6
[ ] rabbitmq_peer_discovery_common 4.0.6
[ ] rabbitmq_peer_discovery_consul 4.0.6
[ ] rabbitmq_peer_discovery_etcd 4.0.6
[ ] rabbitmq_peer_discovery_k8s 4.0.6
[ ] rabbitmq_prometheus 4.0.6
[ ] rabbitmq_random_exchange 4.0.6
[ ] rabbitmq_recent_history_exchange 4.0.6
[ ] rabbitmq_sharding 4.0.6
[ ] rabbitmq_shovel 4.0.6
[ ] rabbitmq_shovel_management 4.0.6
[ ] rabbitmq_shovel_prometheus 4.0.6
[ ] rabbitmq_stomp 4.0.6
[ ] rabbitmq_stream 4.0.6
[ ] rabbitmq_stream_management 4.0.6
[ ] rabbitmq_top 4.0.6
[ ] rabbitmq_tracing 4.0.6
[ ] rabbitmq_trust_store 4.0.6
[e*] rabbitmq_web_dispatch 4.0.6
[ ] rabbitmq_web_mqtt 4.0.6
[ ] rabbitmq_web_mqtt_examples 4.0.6
[ ] rabbitmq_web_stomp 4.0.6
[ ] rabbitmq_web_stomp_examples 4.0.6
LISTEN 0 128 0.0.0.0:25672 0.0.0.0:*
LISTEN 0 1024 0.0.0.0:15672 0.0.0.0:*
LISTEN 0 128 *:5672 *:*
Adding user "admin" ...
Done. Don't forget to grant the user permissions to some virtual hosts! See 'rabbitmqctl help set_permissions' to learn more.
Setting tags for user "admin" to [administrator] ...
Deleting user "guest" ...
Listing users ...
user tags
admin [administrator]
链接地址: http://10.0.0.233:15672/
用户: admin
密码: yinzhengjie
[root@worker233 ~]#
3.访问WebUI
如上图所示
2.创建管理员用户
3.
三.
本文来自博客园,作者:尹正杰,转载请注明原文链接:https://www.cnblogs.com/yinzhengjie/p/18718951,个人微信: "JasonYin2020"(添加时请备注来源及意图备注,有偿付费)
当你的才华还撑不起你的野心的时候,你就应该静下心来学习。当你的能力还驾驭不了你的目标的时候,你就应该沉下心来历练。问问自己,想要怎样的人生。

浙公网安备 33010602011771号