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.


三.

posted @ 2025-02-16 22:10  尹正杰  阅读(957)  评论(0)    收藏  举报