RabbitMQ 简介及其安装
Rabbitmq Aciton Guid
前言
目录
RabbitMQ
官网:https://www.rabbitmq.com
官网下载地址:https://www.rabbitmq.com/download.html
GitHub各个版本下载地址:https://github.com/rabbitmq/rabbitmq-server/releases 或 https://github.com/rabbitmq/rabbitmq-server/tags
与Erlang语言环境版本关系:https://www.rabbitmq.com/which-erlang.html
Erlang语言环境下载:https://www.erlang.org/downloads 或者 https://github.com/erlang/otp/releases
Docker:https://registry.hub.docker.com/_/rabbitmq/
RabbitMQ简介
RabbitMQ是目前非常热门的一款消息中间件,不管是互联网行业还是传统行业都在大量地使用。RabbitMQ凭借其高可靠、易扩展、高可用及丰富的功能特性受到越来越多企业的青睐。
什么是消息中间件
消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串、JSON等,也可以很复杂,比如内嵌对象。
消息队列中间件(Message Queue Middleware,简称为MQ)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。
消息队列中间件,也可以称为消息队列或者消息中间件。它一般有两种传递模式:
-
点对点(P2P,Point-to-Point)模式
点对点模式是基于队列的,消息生产者发送消息到队列,消息消费者从队列中接收消息,队列的存在使得消息的异步传输成为可能。
-
发布/订阅(Pub/Sub)模式。
发布订阅模式定义了如何向一个内容节点发布和订阅消息,这个内容节点称为主题(topic),主题可以认为是消息传递的中介,消息发布者将消息发布到某个主题,而消息订阅者则从主题中订阅消息。主题使得消息的订阅者与消息的发布者互相保持独立,不需要进行接触即可保证消息的传递,发布/订阅模式在消息的一对多广播时采用。
消息中间件的作用
消息中间件凭借其独到的特性,在不同的应用场景下可以展现不同的作用。总的来说,消息中间件的作用可以概括如下。
- 解耦:在项目启动之初来预测将来会碰到什么需求是极其困难的。消息中间件在处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口,这允许你独立地扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束即可。
- 冗余(存储):有些情况下,处理数据的过程会失败。消息中间件可以把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。在把一个消息从消息中间件中删除之前,需要你的处理系统明确地指出该消息已经被处理完成,从而确保你的数据被安全地保存直到你使用完毕。
- 扩展性:因为消息中间件解耦了应用的处理过程,所以提高消息入队和处理的效率是很容易的,只要另外增加处理过程即可,不需要改变代码,也不需要调节参数。削峰:在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见。如果以能处理这类峰值为标准而投入资源,无疑是巨大的浪费。使用消息中间件能够使关键组件支撑突发访问压力,不会因为突发的超负荷请求而完全崩溃。
- 可恢复性:当系统一部分组件失效时,不会影响到整个系统。消息中间件降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入消息中间件中的消息仍然可以在系统恢复后进行处理。顺序保证:在大多数使用场景下,数据处理的顺序很重要,大部分消息中间件支持一定程度上的顺序性。
- 缓冲:在任何重要的系统中,都会存在需要不同处理时间的元素。消息中间件通过一个缓冲层来帮助任务最高效率地执行,写入消息中间件的处理会尽可能快速。该缓冲层有助于控制和优化数据流经过系统的速度。
- 异步通信:在很多时候应用不想也不需要立即处理消息。消息中间件提供了异步处理机制,允许应用把一些消息放入消息中间件中,但并不立即处理它,在之后需要的时候再慢慢处理。
Window 安装
Erlang语言运行环境
Erlang是RabbitMQ的运行环境,所以得先安装。
下载
特别注意:
RabbitMQ版本依赖于不同的Erlang语言环境版本,故先决定RabbitMQ的安装版本,再决定安装哪个版本的Erlang
RabbitMQ与Erlang语言环境版本关系参见:https://www.rabbitmq.com/which-erlang.html
打开Erlang语言环境下载地址:https://www.erlang.org/downloads
其它平台及其版本的下载地址:https://github.com/erlang/otp/releases
安装
这里使用的Erlang语言环境版本: otp_win64_23.3.exe,
下载完成后,双击打开进行安装,安装目录:C:\Program Files\erl-23.3
然后设置环境变量
ERLANG_HOME:C:\Program Files\erl-23.3
Path: %ERLANG_HOME%\bin
运行CMD:
C:\Users\wei>erl -v
Eshell V11.2 (abort with ^G)
1>
说明安装成功。
安装RabbitMQ
这里使用的RabbitMQ版本是RabbitMQ-3.8.14,
到这里下载:
https://github.com/rabbitmq/rabbitmq-server/tags
如果该版本已经不存在,可以选择其它版本,只要与Erlang语言环境版本对应即可。
这里使用的版本是[rabbitmq-server-windows-3.8.14.zip] ,点击下载后进行解压,然后把解压后的文件夹rabbitmq_server-3.8.14
拷贝到C:\Program Files\
,即最终目录为:
C:\Program Files\rabbitmq_server-3.8.14
以管理员身份打开CMD
C:\WINDOWS\system32>cd C:\Program Files\rabbitmq_server-3.8.14\sbin
#安装为windows服务
C:\Program Files\rabbitmq_server-3.8.14\sbin>rabbitmq-service install
#安装成功提示
C:\Program Files\erl-23.3\erts-11.2\bin\erlsrv: Service RabbitMQ added to system.
C:\Program Files\rabbitmq_server-3.8.14\sbin>
安装的过程中,如果出现错误:ERLANG_HOME 无法找到,尝试重启电脑
接着启用并启动服务
#服务启用
C:\Program Files\rabbitmq_server-3.8.14\sbin>rabbitmq-service enable
#输出如下内容
C:\Program Files\erl-23.3\erts-11.2\bin\erlsrv: Service RabbitMQ enabled.
#服务启动
C:\Program Files\rabbitmq_server-3.8.14\sbin>rabbitmq-service start
RabbitMQ 服务正在启动 .
RabbitMQ 服务已经启动成功。
C:\Program Files\rabbitmq_server-3.8.14\sbin>
此时,查看windows服务:这时多出了一个RabbitMQ
的windows服务
查看服务器状态
C:\Program Files\rabbitmq_server-3.8.14\sbin>rabbitmqctl status
Error: unable to perform an operation on node 'rabbit@DESKTOP-E6NOF0N'. Please see diagnostics information and suggestions below.
Most common reasons for this are:
* Target node is unreachable (e.g. due to hostname resolution, TCP connection or firewall issues)
* CLI tool fails to authenticate with the server (e.g. due to CLI tool's Erlang cookie not matching that of the server)
* Target node is not running
In addition to the diagnostics info below:
* See the CLI, clustering and networking guides on https://rabbitmq.com/documentation.html to learn more
* Consult server logs on node rabbit@DESKTOP-E6NOF0N
* If target node is configured to use long node names, don't forget to use --longnames with CLI tools
DIAGNOSTICS
===========
attempted to contact: ['rabbit@DESKTOP-E6NOF0N']
rabbit@DESKTOP-E6NOF0N:
* connected to epmd (port 4369) on DESKTOP-E6NOF0N
* epmd reports node 'rabbit' uses port 25672 for inter-node and CLI tool traffic
* TCP connection succeeded but Erlang distribution failed
* suggestion: check if the Erlang cookie identical for all server nodes and CLI tools
* suggestion: check if all server nodes and CLI tools use consistent hostnames when addressing each other
* suggestion: check if inter-node connections may be configured to use TLS. If so, all nodes and CLI tools must do that
* suggestion: see the CLI, clustering and networking guides on https://rabbitmq.com/documentation.html to learn more
Current node details:
* node name: 'rabbitmqcli-369-rabbit@DESKTOP-E6NOF0N'
* effective user's home directory: C:\Users\wei
* Erlang cookie hash: WdpOFxVp/R53mEM5zLwTCQ==
出现以上的错误,
或者若出现如下图所示错误:
问题都指示 Erlang cookie 是有问题的!
解决方法:
将C:\Users\wei\
目录中的文件.erlang.cookie
拷贝到如下两个目录
C:\Users\wei\ 要换成你本机的目录,即:C:\Users{你的用户名}\
# 这个文件夹已经存在同名文件.erlang.cookie,将其覆盖
C:\Windows\System32\config\systemprofile
C:\Program Files\rabbitmq_server-3.8.14\sbin
注意:如果无C:\Windows\System32\config\systemprofile
文件夹,手动创建。
再输入如下命令,查看服务状态:
# 提示一些错误
C:\Program Files\rabbitmq_server-3.8.14\sbin>rabbitmqctl status
Error: this command requires the 'rabbit' app to be running on the target node. Start it with 'rabbitmqctl start_app'.
Arguments given:
status
[1mUsage[0m
rabbitmqctl [--node <node>] [--longnames] [--quiet] status [--unit <unit>] [--timeout <timeout>]
还是提示错误, 需要关闭当前的 CMD 命令窗口,重新以管理员的身份打开一个新的CMD命令窗口,重新运行:
C:\Program Files\rabbitmq_server-3.8.14\sbin>rabbitmqctl status
如果还是报错,尝试重启RabbitMQ的windows服务,再不行重启电脑
若还是提示以上些错误,多启动windows服务几次,等待久一点
如果输出如下内容, 说明已经正常启动了
C:\Program Files\rabbitmq_server-3.8.14\sbin>rabbitmqctl status
Status of node rabbit@DESKTOP-E6NOF0N ...
[1mRuntime[0m
OS PID: 10516
OS: Windows
Uptime (seconds): 246
Is under maintenance?: false
RabbitMQ version: 3.8.14
Node name: rabbit@DESKTOP-E6NOF0N
Erlang configuration: Erlang/OTP 23 [erts-11.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1]
Erlang processes: 308 used, 1048576 limit
Scheduler run queue: 1
Cluster heartbeat timeout (net_ticktime): 60
[1mPlugins[0m
Enabled plugin file: c:/Users/wei/AppData/Roaming/RabbitMQ/enabled_plugins
Enabled plugins:
[1mData directory[0m
Node data directory: c:/Users/wei/AppData/Roaming/RabbitMQ/db/rabbit@DESKTOP-E6NOF0N-mnesia
Raft data directory: c:/Users/wei/AppData/Roaming/RabbitMQ/db/rabbit@DESKTOP-E6NOF0N-mnesia/quorum/rabbit@DESKTOP-E6NOF0N
[1mConfig files[0m
[1mLog file(s)[0m
* c:/Users/wei/AppData/Roaming/RabbitMQ/log/rabbit@DESKTOP-E6NOF0N.log
* c:/Users/wei/AppData/Roaming/RabbitMQ/log/rabbit@DESKTOP-E6NOF0N_upgrade.log
[1mAlarms[0m
(none)
[1mMemory[0m
Total memory used: 0.12 gb
Calculation strategy: rss
Memory high watermark setting: 0.4 of available memory, computed to: 6.8238 gb
other_proc: 0.0459 gb (36.07 %)
allocated_unused: 0.031 gb (24.36 %)
code: 0.0293 gb (23.0 %)
other_system: 0.0155 gb (12.19 %)
other_ets: 0.003 gb (2.38 %)
atom: 0.0014 gb (1.07 %)
plugins: 0.0004 gb (0.35 %)
binary: 0.0003 gb (0.27 %)
metrics: 0.0002 gb (0.17 %)
mnesia: 0.0001 gb (0.07 %)
quorum_ets: 0.0 gb (0.04 %)
msg_index: 0.0 gb (0.03 %)
connection_channels: 0.0 gb (0.0 %)
connection_other: 0.0 gb (0.0 %)
connection_readers: 0.0 gb (0.0 %)
connection_writers: 0.0 gb (0.0 %)
mgmt_db: 0.0 gb (0.0 %)
queue_procs: 0.0 gb (0.0 %)
queue_slave_procs: 0.0 gb (0.0 %)
quorum_queue_procs: 0.0 gb (0.0 %)
reserved_unallocated: 0.0 gb (0.0 %)
[1mFile Descriptors[0m
Total: 2, limit: 65439
Sockets: 0, limit: 58893
[1mFree Disk Space[0m
Low free disk space watermark: 0.05 gb
Free disk space: 105.4149 gb
[1mTotals[0m
Connection count: 0
Queue count: 0
Virtual host count: 1
[1mListeners[0m
Interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Interface: 0.0.0.0, port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
C:\Program Files\rabbitmq_server-3.8.14\sbin>
Web管理界面
默认情况下,RabbitMQ 没有启用Web端的客户端插件,需要手动启用才可以生效
RabbitMQ插件:https://www.rabbitmq.com/management.html
查看是否已启用
查看下插件列表:
C:\Program Files\rabbitmq_server-3.8.14\sbin>rabbitmq-plugins list
Listing plugins with pattern ".*" ...
Configured: E = explicitly enabled; e = implicitly enabled
| Status: * = running on rabbit@DESKTOP-E6NOF0N
|/
[ ] rabbitmq_amqp1_0 3.8.14
[ ] rabbitmq_auth_backend_cache 3.8.14
[ ] rabbitmq_auth_backend_http 3.8.14
[ ] rabbitmq_auth_backend_ldap 3.8.14
[ ] rabbitmq_auth_backend_oauth2 3.8.14
[ ] rabbitmq_auth_mechanism_ssl 3.8.14
[ ] rabbitmq_consistent_hash_exchange 3.8.14
[ ] rabbitmq_event_exchange 3.8.14
[ ] rabbitmq_federation 3.8.14
[ ] rabbitmq_federation_management 3.8.14
[ ] rabbitmq_jms_topic_exchange 3.8.14
[ ] rabbitmq_management 3.8.14
[ ] rabbitmq_management_agent 3.8.14
[ ] rabbitmq_mqtt 3.8.14
[ ] rabbitmq_peer_discovery_aws 3.8.14
[ ] rabbitmq_peer_discovery_common 3.8.14
[ ] rabbitmq_peer_discovery_consul 3.8.14
[ ] rabbitmq_peer_discovery_etcd 3.8.14
[ ] rabbitmq_peer_discovery_k8s 3.8.14
[ ] rabbitmq_prometheus 3.8.14
[ ] rabbitmq_random_exchange 3.8.14
[ ] rabbitmq_recent_history_exchange 3.8.14
[ ] rabbitmq_sharding 3.8.14
[ ] rabbitmq_shovel 3.8.14
[ ] rabbitmq_shovel_management 3.8.14
[ ] rabbitmq_stomp 3.8.14
[ ] rabbitmq_top 3.8.14
[ ] rabbitmq_tracing 3.8.14
[ ] rabbitmq_trust_store 3.8.14
[ ] rabbitmq_web_dispatch 3.8.14
[ ] rabbitmq_web_mqtt 3.8.14
[ ] rabbitmq_web_mqtt_examples 3.8.14
[ ] rabbitmq_web_stomp 3.8.14
[ ] rabbitmq_web_stomp_examples 3.8.14
确实没有启用,现在开始启用
[ ]代表没有启用
[*]代表已经启用
启用插件 rabbitmq_management
C:\Program Files\rabbitmq_server-3.8.14\sbin>rabbitmq-plugins enable rabbitmq_management
Enabling plugins on node rabbit@DESKTOP-Q4DR7HN:
rabbitmq_management
The following plugins have been configured:
rabbitmq_management
rabbitmq_management_agent
rabbitmq_web_dispatch
Applying plugin configuration to rabbit@DESKTOP-Q4DR7HN...
The following plugins have been enabled:
rabbitmq_management
rabbitmq_management_agent
rabbitmq_web_dispatch
set 3 plugins.
Offline change; changes will take effect at broker restart.
查看是否启用插件成功
再次查看插件列表
C:\Program Files\rabbitmq_server-3.8.14\sbin>rabbitmq-plugins list rabbitmq_management
Listing plugins with pattern "rabbitmq_management" ...
Configured: E = explicitly enabled; e = implicitly enabled
| Status: * = running on rabbit@DESKTOP-E6NOF0N
|/
[E*] rabbitmq_management 3.8.14
[e*] rabbitmq_management_agent 3.8.14
成功启用插件后,访问地址:http://localhost:15672
启用插件后,如果还是无法访问,尝试重启RabbitMQ服务
重启RabbitMQ服务
启用插件后,如果还是无法访问,尝试重启RabbitMQ服务
- windows
-
Linux
systemctl restart rabbitmq-server
登录
访问地址:http://localhost:15672
RabbitMQ 有一个默认账号 :guest, 密码:guest,
默认情况下,只能在 localhost 本机下访问,若要使用IP地址方法,需要添加一个远程登录的用户。
使用账号:guest/guest 登录后
用户
查看用户列表
查看用户列表
C:\Program Files\rabbitmq_server-3.8.14\sbin>rabbitmqctl list_users
Listing users ...
user tags
guest [administrator]
guest是默认的管理员账号,密码是:guest
创建用户
默认情况下,只能在 localhost 本机下访问,若要使用IP地址方法,需要添加一个远程登录的用户。
//创建用户testuser密码为123456
rabbitmqctl add_user testuser 123456
//赋予testuser读写所有消息队列的权限
rabbitmqctl set_permissions testuser ".*" ".*" ".*"
//分配用户组(administrator)
rabbitmqctl set_user_tags testuser administrator
其它设置
为了方便查找,设置如下环境变量 ,这样可以在任何地方在CMD运行RabbitMQ命令
RABBITMQ_SERVER: C:\Program Files\rabbitmq_server-3.8.14 (根目录)
Path :%RABBITMQ_SERVER%\sbin
实践证明,上述操作后,是无法在任何地方打开CMD运行RabbitMQ命令的,暂时不搞了。
要使用时,还是到安装目录 C:\Program Files\rabbitmq_server-3.8.14
相应的目录下运行相应的命令
卸载RabbitMQ 和Erlang环境
1 打开Windows控制面板,双击“程序和功能”。
2 在当前安装的程序列表中,右键单击RabbitMQ Server,然后单击“卸载”。
3 在当前安装的程序列表中,右键单击“Erlang OTP”,然后单击“卸载”。
4 打开Windows任务管理器。
5 在任务管理器中,查找进程epmd.exe。 如果此进程仍在运行,请右键单击该进程,然后单击“结束进程”。
6 删除RabbitMQ和Erlang的所有安装目录。
7 删除文件C:\Windows.erlang.cookie(如果存在)。
8 删除电脑找那个所有的.erlang.cookie。
9 同样在User文件夹中,转到AppData\Roaming\RabbitMQ。删除RabbitMQ
10 打开运行cmd->sc delete RabbitMQ。
11 打开运行->regedit 找到RabbitMQ节点,删掉即可
DotNetCore 如何使用
参考资料:
.NET Core 中使用 RabbitMQ :https://blog.csdn.net/sundna/article/details/92701805