RabbitMQ 简介及其安装

Rabbitmq Aciton Guid

前言

目录

RabbitMQ

官网:https://www.rabbitmq.com
官网下载地址:https://www.rabbitmq.com/download.html
GitHub各个版本下载地址:https://github.com/rabbitmq/rabbitmq-server/releaseshttps://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

Usage

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 ...
Runtime

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

Plugins

Enabled plugin file: c:/Users/wei/AppData/Roaming/RabbitMQ/enabled_plugins
Enabled plugins:


Data directory![](https://img2022.cnblogs.com/blog/380433/202205/380433-20220503103138010-1063166949.png)


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

Config files


Log file(s)

 * c:/Users/wei/AppData/Roaming/RabbitMQ/log/rabbit@DESKTOP-E6NOF0N.log
 * c:/Users/wei/AppData/Roaming/RabbitMQ/log/rabbit@DESKTOP-E6NOF0N_upgrade.log

Alarms

(none)

Memory

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 %)

File Descriptors

Total: 2, limit: 65439
Sockets: 0, limit: 58893

Free Disk Space

Low free disk space watermark: 0.05 gb
Free disk space: 105.4149 gb

Totals

Connection count: 0
Queue count: 0
Virtual host count: 1

Listeners

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

posted @ 2022-05-03 10:48  easy5  阅读(1064)  评论(0)    收藏  举报