https://www.rabbitmq.com/
1、RabbitMQ 简介
RabbitMQ 采用 Erlang 语言开发,Erlang 语言由 Ericson 设计,Erlang 在分布式编程和故障恢复方面表现出色,电信领域被广泛使用。
https://www.erlang.org
![图片[1]-RabbitMQ-李佳程的个人主页](http://www.lijiach.com/wp-content/uploads/2022/12/image-268.png)
- Broker:接收和分发消息的应用,RabbitMQ Server 就是 Message Broker。
- Virtual host:出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类似于网络中的 namespace 概念,当多个不同的用户使用同一个RabbitMQ server 提供的服务时,可以划分出多个 vhost,每个用户在自己的 vhost创建 exchange/queue 等。
- Connection:publisher/consumer 和 broker 之间的 TCP 连接。
- Channel:如果每一次访问 RabbitMQ 都建立一个 Connection,在消息量大的时候建立 TCP Connection 的开销将是巨大的,效率也较低。Channel 是在 connection内部建立的逻辑连接,如果应用程序支持多线程,通常每个 thread 创建单独的channel 进行通讯,AMQP method 包含了 channel id 帮助客户端和 message broker识别 channel,所以 channel 之间是完全隔离的。Channel 作为轻量级的 Connectio极大减少了操作系统建立 TCP connection 的开销。
- Exchange:message 到达 broker 的第一站,根据分发规则,匹配查询表中的 routingkey,分发消息到 queue 中去。常用的类型有:direct (point-to-point), topic(publish-subscribe) and fanout (multicast)。
- Queue:消息最终被送到这里等待 consumer 取走。
- Binding:exchange 和 queue 之间的虚拟连接,binding 中可以包含 routing key。Binding 信息被保存到 exchange 中的查询表中,用于 message 的分发依据。
rabbitmq 优势:
- 基于 erlang 语言开发,具有高并发优点、支持分布式
- 具有消息确认机制、消息持久化机制,消息可靠性和集群可靠性高
- 简单易用、运行稳定、跨平台、多语言
- 开源
Queue 的特性:
- 消息基于先进先出的原则进行顺序消费
- 消息可以持久化到磁盘节点服务器
- 消息可以缓存到内存节点服务器提高性能
2、RabbitMQ 中的生产者消费者示例
![图片[2]-RabbitMQ-李佳程的个人主页](http://www.lijiach.com/wp-content/uploads/2022/12/image-269.png)
生产者发送消息到 broker server(RabbitMQ),在 Broker 内部,用户创建 Exchange和Queue,通过 Binding 规则将两者联系在一起,Exchange 分发消息,根据类型binding 的不同分发策略有区别,消息最后来到 Queue 中,等待消费
3、RabbitMQ 单机部署
https://www.rabbitmq.com/download.html #官网下载地址
https://github.com/rabbitmq/rabbitmq-server/releases #github 下载地址
服务器环境:
192.168.1.81 mq01 ubuntu2004
3.1、安装单机版 RabbitMQ:
https://www.rabbitmq.com/install-debian.html
主机名解析
在当前 MQ 服务器配置本地主机名解析
root@mq01:~# vim /etc/hosts
192.168.1.81 mq01
安装基础包
sudo apt-get install curl gnupg -y
启用 apt HTTPS 传输
为了使 apt 能够从 PackageCloud、Cloudsmith.io 或 Launchpad 等服务下载 RabbitMQ 和 Erlang 软件包, 必须安装 apt-transport-https 软件包
sudo apt-get install apt-transport-https
-y
添加存储库签名密钥
为了使 apt 使用存储库,RabbitMQ 签名密钥必须可供系统进行验证。
## 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
## Launchpad PPA that provides modern Erlang releases
curl -1sLf "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xf77f1eda57ebb1cc" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/net.launchpad.ppa.rabbitmq.erlang.gpg > /dev/null
## PackageCloud RabbitMQ repository
curl -1sLf "https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/io.packagecloud.rabbitmq.gpg > /dev/null
添加源列表文件
与所有第三方 apt 存储库一样,描述 RabbitMQ 和 Erlang 软件包存储库的文件 必须放在 /etc/apt/sources.list.d/ 目录下。/etc/apt/sources.list.d/rabbitmq.list 是推荐的位置。
sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
## Provides modern Erlang/OTP releases
##
## "bionic" as distribution name should work for any reasonably recent Ubuntu or Debian release.
## See the release to distribution mapping table in RabbitMQ doc guides to learn more.
deb [signed-by=/usr/share/keyrings/net.launchpad.ppa.rabbitmq.erlang.gpg] http://ppa.launchpad.net/rabbitmq/rabbitmq-erlang/ubuntu bionic main
deb-src [signed-by=/usr/share/keyrings/net.launchpad.ppa.rabbitmq.erlang.gpg] http://ppa.launchpad.net/rabbitmq/rabbitmq-erlang/ubuntu bionic main
## Provides RabbitMQ
##
## "bionic" as distribution name should work for any reasonably recent Ubuntu or Debian release.
## See the release to distribution mapping table in RabbitMQ doc guides to learn more.
deb [signed-by=/usr/share/keyrings/io.packagecloud.rabbitmq.gpg] https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu/ bionic main
deb-src [signed-by=/usr/share/keyrings/io.packagecloud.rabbitmq.gpg] https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu/ bionic main
EOF
安装软件包
更新 apt 源列表后,有必要运行 apt-get update
sudo apt-get update -y
然后使用
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
sudo apt-get install rabbitmq-server -y --fix-missing
启动 RabbitMQ 服务
root@mq01:~# systemctl start rabbitmq-server
root@mq01:~# systemctl enable rabbitmq-server
Synchronizing state of rabbitmq-server.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable rabbitmq-server
root@mq01:~# ps -ef | grep rabbitmq
rabbitmq 2649 1 1 00:36 ? 00:00:03 /usr/lib/erlang/erts-13.1.3/bin/beam.smp -W w -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1048576 -t 5000000 -stbt db -zdbbl 128000 -sbwt none -sbwtdcpu none -sbwtdio none -- -root /usr/lib/erlang -bindir /usr/lib/erlang/erts-13.1.3/bin -progname erl -- -home /var/lib/rabbitmq -- -pa -noshell -noinput -s rabbit boot -boot start_sasl -syslog logger [] -syslog syslog_error_logger false -kernel prevent_overlapping_partitions false
rabbitmq 2696 2649 0 00:36 ? 00:00:00 erl_child_setup 32768
rabbitmq 2729 1 0 00:36 ? 00:00:00 /usr/lib/erlang/erts-13.1.3/bin/epmd -daemon
rabbitmq 2752 2696 0 00:36 ? 00:00:00 /usr/lib/erlang/erts-13.1.3/bin/inet_gethost 4
rabbitmq 2753 2752 0 00:36 ? 00:00:00 /usr/lib/erlang/erts-13.1.3/bin/inet_gethost 4
rabbitmq 2756 2696 0 00:37 ? 00:00:00 /bin/sh -s rabbit_disk_monitor
root 4389 1234 0 00:42 pts/0 00:00:00 grep --color=auto rabbitmq
3.2、RabbitMQ 插件管理
https://www.rabbitmq.com/management.html
开启 web 界面管理插件
root@mq01:~# rabbitmq-plugins enable rabbitmq_management
Enabling plugins on node rabbit@mq01:
rabbitmq_management
The following plugins have been configured:
rabbitmq_management
rabbitmq_management_agent
rabbitmq_web_dispatch
Applying plugin configuration to rabbit@mq01...
The following plugins have been enabled:
rabbitmq_management
rabbitmq_management_agent
rabbitmq_web_dispatch
started 3 plugins.
5672:消费者访问的 端口
15672:web 管理端口
25672:集群状态通信端口
登陆 web 管理界面
rabbitmq 从 3.3.0 开始禁止使用 guest/guest 权限通过除 localhost 外的访问,直接访问报错如下:
![图片[3]-RabbitMQ-李佳程的个人主页](http://www.lijiach.com/wp-content/uploads/2022/12/image-270.png)
允许登录方式
root@mq01:~# vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.11.5/plugins/rabbit-3.11.5/ebin/rabbit.app
40 {loopback_users, []}, #删除被禁止登陆的 guest 账户
root@mq01:~# systemctl restart rabbitmq-server.service
![图片[4]-RabbitMQ-李佳程的个人主页](http://www.lijiach.com/wp-content/uploads/2022/12/image-271.png)
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END