热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

RabbitMQ细说之开篇(rabbitmq安装教程)

本文主要分享【rabbitmq安装教程】,技术文章【RabbitMQ细说之开篇】为【Code综艺圈】投稿,如果你遇到RabbitMQ,服务间通信相关问题,本文相关知识或能到你。rabbitmq安装教

本文主要分享【rabbitmq安装教程】,技术文章【RabbitMQ细说之开篇】为【Code综艺圈】投稿,如果你遇到RabbitMQ,服务间通信相关问题,本文相关知识或能到你。

rabbitmq安装教程

前言

关于消息中间件的应用场景,小伙伴们应该都耳熟能详了吧,比如经常提到的削峰填谷、分布式事务、异步业务处理、大数据分析等等,分布式消息队列成为其中比较关键的桥梁,也就意味着小伙伴们得掌握相关技能;当下相对比较热门的消息中间件有RabbitMQ、Kafaka、RocketMQ、ActiveMQ等,在实际应用场景中,发现很多小伙伴和我一样都是跟着相关框架(CAP、Masstransit等)文档进行使用,实现功能,并没有关注消息队列相关知识点,总感觉缺少点精髓,所以想着就以RabbitMQ为着手点,一起学习学习相关细节。

正文 1. 简介 1.1 RabbitMQ 概要

RabbitMQ是基于Erlang语言开发的开源消息中间件,比较轻量级,广泛应用于分布式系统中存储消息、转发消息,具有高可用,高可扩性,易用性等特征。

RabbitMQ支持多种消息传递协议,默认采用的是AMQP协议,通过插件扩展的方式可以支持STOMP、MQTT、RabbitMQ Stream协议。

AMQP协议简单理解

AMQP:(全称:Advanced Message Queuing Protocol-是高级消息队列协议) ,是一个提供统一消息服务的应用层标准高级消息队列协议,是一种二进制协议;基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品、不同的开发语言等条件的限制。

核心组成部分

RabbitMQ基于AMQP实现,主要组成部分及流程如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZeNMjCtr-1658594469479)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/074699b813ae47e1b736ea73c84e5006~tplv-k3u1fbpfcp-zoom-1.image)]

上图简介:

生产者负责将消息投递到服务器中,消费者负责订阅接收消息,然后进行对应的业务处理。经过的核心组成部分如下:

生产者(Producer) :负责产生消息,并将消息发送到服务器上;

消费者(Consumer) :负责消息的消费,即订阅消息,然后处理相关的业务逻辑;

Message :消息:服务与应用程序之间传送的数据,由一些属性和消息体组成,通过属性可以设置消息的优先级,延迟等高级特性

服务器(Server) :又称Broker ,接受客户端的连接。保证消息能够按照指定的方式进行传输; 连接(Connection) :应用程序与Broker的网络连接(TCP-IP/ 三次握手和四次挥手); Channel:虚拟连接,它是基于Connection连接建立的,几乎所有的操作都在Channel中进行,Channel是进行消息读写的通道,客户端可以建立多个Channel,每个Channel代表一个会话任务;

Virtual Host 虚拟地址,用于进行逻辑隔离,一个虚拟主机可以有若干个Exchange和Queue,同一个虚拟主机里面不能有相同名字的Exchange; 交换机(Exchange) :接受消息,根据路由键投递消息到绑定的队列,本身不具备消息存储的能力; Bindings:Exchange和Queue之间的虚拟关系,Binding中可以有多个routing key; Routing key:是一个路由规则,虚拟机可以用它来确定如何路由一个特定消息; 队列(Queue) :也称为消息队列(Message Queue),主要功能是保存消息并将其转发给消费者;

具体详细小伙伴可以看看官网(https://www.rabbitmq.com/),接下来我们就开始安装,然后先上手玩玩。

2. 安装及界面简介 2.1 安装

按照传统方式安装,需要进行Erlang语言环境安装、配置用户,为了方便,这里还是用我最喜欢(偷懒)的Docker方式安装,关于Docker相关系列的教程,点击《Docker系列》看详细内容。

这里演示还是使用阿里云服务器,完成Docker环境安装之后,直接执行如下命令即可完成RabbitMq的安装:

docker run -di --name RabbitDemo -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 -p 25672:25672 -p 61613:61613 -p 1883:1883 rabbitmq:management

命令简介:

-d:指定后台启动容器;

--name:指定容器名称为RabbtiDemo;

-e: 指定环境变量,设置RabbitMQ的用户名和密码;

-p: 主机端口和容器端口的映射

端口简介

5672:RabbitMQ的通讯端口; 15672:RabbitMQ HTTP API的端口,启动Management插件,可查看和管理RabbitMQ相关信息。 25672:RabbitMQ节点间的CLI通讯端口; 1883、8883:MQTT插件启动时的端口。 61613、61614:STOMP客户端插件启用时的端口。 15674、15675:基于Websocket的STOMP端口和MOTT端口

我们主要是来说说RabbitMQ默认的协议AMQP,所以这里只关注5672、15672、25672即可。如果小伙伴也是用云服务器,则需要对应的端口添加到安全组和防火墙中

通过docker ps 命令查看容器运行正常之后,就可以通过浏览器访问RabbitMQ的管理页面,如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2bXRfIiM-1658594469481)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/699002d5f18344ca9182c5acdf4d06d9~tplv-k3u1fbpfcp-zoom-1.image)]

输入安装时设置的用户名和密码就可以登录到管理主界面了。

2.2 界面初识

首页概览

首页会展示一些整体信息,包括消息、节点等相关信息。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CLz0V7Ha-1658594469481)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/88c9268598fb49968432bb3dfc6136cc~tplv-k3u1fbpfcp-zoom-1.image)]

连接(Connections)情况

对于Connections和Channels而言,默认安装完是没有的,这里为了展示全一点的信息,搞了个客户端连上,在后续的代码实战中我们会好好仔细说说。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XKRDBru5-1658594469482)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/9501a5908f4342b1b99b528611916952~tplv-k3u1fbpfcp-zoom-1.image)]

点击队列名称可以进入连接详情,如果对应的用户有权限,可以强制关掉对应的连接。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WeFCvC8Q-1658594469482)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c3baa3a39c7a4e1e984a94133d5a3c44~tplv-k3u1fbpfcp-zoom-1.image)]

Channels情况

Channel是基于Connection的,一个Connection中可以创建多个Channel,提高传输效率。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NXma8pZM-1658594469483)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/59b0e1550f28459eaca17a318d8b1ab5~tplv-k3u1fbpfcp-zoom-1.image)]

交换机(Exchangs)管理

交换机主要用来进行转发消息,可以只设置模式,将消息投递到队列中。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QnvdPkiQ-1658594469483)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f967b483a9d84e5086674ce0c673fe5b~tplv-k3u1fbpfcp-zoom-1.image)]

里面的具体参数信息,后续会在实际演示情况的时候一一说到。

队列(Queues)管理

队列就是为存储消息并将其转发给消费者。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uxqDDLqN-1658594469483)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/61382df08da44303bb696932e6d5669f~tplv-k3u1fbpfcp-zoom-1.image)]

点击队列进入详情页面,可以绑定交换机等操作,如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UHf8TAeV-1658594469484)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d30a0ea6d85242a3a68695c4f3bb56ec~tplv-k3u1fbpfcp-zoom-1.image)]

用户/权限/虚拟主机(Virtual Host)等管理

用户管理

针对不同的使用场景添加不同的用户,并设置对应的权限。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iXxJlqKI-1658594469485)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c9cf3a14695f472593bd60d22992a8ce~tplv-k3u1fbpfcp-zoom-1.image)]

Virtual Hosts管理

Virtual Hosts的主要目的就是隔离、分类,可以理解为电脑文件夹,不同的文件进行归类存放到对应的文件夹中,还可以对其进行设置相关的权限,这样就可以让不同的用户访问到不同的队列、交换机,互不影响。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HNABn70A-1658594469485)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/55ab6398645d4b3685d8d96d82914e7b~tplv-k3u1fbpfcp-zoom-1.image)]

创建好的虚拟主机点击名字进详情,还能配置对应的权限。

FeatureFlags、Policies、Limits、Cluster是一些信息显示和额外配置,这里先不截图,后续用到的时候再细说。

2.3 角色分类细说

关于用户角色,RabbitMQ已经内置了几个,在创建用户时可以进行选择,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BxmkAKZU-1658594469485)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f3596e801b2446208780ca194f2cc1a5~tplv-k3u1fbpfcp-zoom-1.image)]

为了演示方便,针对每种角色创建对应的用户,如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dpQnQpYo-1658594469486)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/92dcf01ac3de4ba99d0a12d6ca4e4777~tplv-k3u1fbpfcp-zoom-1.image)]

每个角色对应的权限说明如下:

Admin(Administrator)

最高管理权限,可以查看所有信息并进行相关资源的管理,如:创建和删除Virtual Host、创建和删除用户、创建permmission、关闭所有用户的连接。

上面的截图就是管理员的操作界面,这里就不重复截图了。

Monitoring

可登陆管理控制台,同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等),可以管理对应的交换机和队列。

在管理页面只能查看策略,其他不能查看和管理:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UAX6zGXg-1658594469486)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/baa6f50430e04d7cac84e5fa8f3d0447~tplv-k3u1fbpfcp-zoom-1.image)]

其实Limits也不能配置,提示不是管理员权限:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RXiP8d9D-1658594469486)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/780d230674614811978476179c35d245~tplv-k3u1fbpfcp-zoom-1.image)]

Policymaker

可登陆管理控制台,但无法查看节点的相关信息,主要是进行策略的管理,同时也可以管理自己的交换机、队列;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2vP9mARJ-1658594469487)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/9e8780cb083349a58f7296c2fdadb794~tplv-k3u1fbpfcp-zoom-1.image)]

Management

可登陆管理控制台,无法看到节点相关的信息,能管理自己相关的交换机、队列等,无法对策略进行管理,其实可以理解为针对个人管理的权限。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1oFwTXja-1658594469487)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/5cec7a744268457fbf87dbc4612b21f6~tplv-k3u1fbpfcp-zoom-1.image)]

Impersonator

模拟角色,无法登陆管理控制台

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XTaftPNO-1658594469488)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/2599fc682e8b45e0b679ffeaace0869e~tplv-k3u1fbpfcp-zoom-1.image)]

None

不设置角色,无法登陆管理控制台,通常就是普通的生产者和消费者;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XRCH5fqV-1658594469488)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/861f38db90e04c3dacb37e4deafea3a9~tplv-k3u1fbpfcp-zoom-1.image)]

最后汇总为一张图,权限从低到高,如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BAnFTosO-1658594469488)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/fb477f0399df43609c11d040356048b7~tplv-k3u1fbpfcp-zoom-1.image)]

3. 命令行工具

如果没有安装管理界面插件,或者说不喜欢用界面操作,也是可以用命令行工具完成界面的上相关操作的。RabbitMQ提供了如下命令行工具:

rabbitmqctl:用于服务管理和一般操作员任务; rabbitmq-diagnostics:用于诊断和健康检查; rabbitmq-plugins:用于插件管理; rabbitmq-queues:用于队列上的维护任务,特别是仲裁队列; rabbitmq-upgrade:用于与升级相关的维护任务;

这里是将RabbitMQ以容器的方式启动,所以进入容器可执行命令,以rabbitmqctl为例演示:

增加用户,执行如下命令:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OXeBfyZm-1658594469489)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d93cc54ce72543c4ba0cf6d5d3bcf0a7~tplv-k3u1fbpfcp-zoom-1.image)]

rabbitmqctl add_user codezyq zyq123456

新增成功,但还没设置权限,通过界面也可以看到没有设置对应的权限:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-avSmMpMX-1658594469489)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/84b458f661e748ba855706f4f79def06~tplv-k3u1fbpfcp-zoom-1.image)]

设置权限,如下:

rabbitmqctl set_user_tags codezyq administrator

执行命令很简单,上面只是演示,命令行工具功能可以实现管理界面的相关功能,小伙伴根据需要执行相关命令即可。

命令的功能解释进入官网有详解:https://www.rabbitmq.com/rabbitmqctl.8.html

总结

关于RabbitMQ安装和理论先说这么多,减少一些概念、名词的纠结。控制篇幅,小伙伴们上WC的时间就能看完~~~;

下一篇聊聊交换机的各种模式,一起通过界面和代码的方式进行实践。关注“Code综艺圈”,和我一起学习吧。

本文《RabbitMQ细说之开篇》版权归Code综艺圈所有,引用RabbitMQ细说之开篇需遵循CC 4.0 BY-SA版权协议。


推荐阅读
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • 基于Linux开源VOIP系统LinPhone[四]
    ****************************************************************************************** ... [详细]
  • 本文详细解析了客户端与服务器之间的交互过程,重点介绍了Socket通信机制。IP地址由32位的4个8位二进制数组成,分为网络地址和主机地址两部分。通过使用 `ipconfig /all` 命令,用户可以查看详细的IP配置信息。此外,文章还介绍了如何使用 `ping` 命令测试网络连通性,例如 `ping 127.0.0.1` 可以检测本机网络是否正常。这些技术细节对于理解网络通信的基本原理具有重要意义。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 性能测试中的关键监控指标与深入分析
    在软件性能测试中,关键监控指标的选取至关重要。主要目的包括:1. 评估系统的当前性能,确保其符合预期的性能标准;2. 发现软件性能瓶颈,定位潜在问题;3. 优化系统性能,提高用户体验。通过综合分析这些指标,可以全面了解系统的运行状态,为后续的性能改进提供科学依据。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • 本文介绍了如何利用 Delphi 中的 IdTCPServer 和 IdTCPClient 控件实现高效的文件传输。这些控件在默认情况下采用阻塞模式,并且服务器端已经集成了多线程处理,能够支持任意大小的文件传输,无需担心数据包大小的限制。与传统的 ClientSocket 相比,Indy 控件提供了更为简洁和可靠的解决方案,特别适用于开发高性能的网络文件传输应用程序。 ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
  • Java中不同类型的常量池(字符串常量池、Class常量池和运行时常量池)的对比与关联分析
    在研究Java虚拟机的过程中,笔者发现存在多种类型的常量池,包括字符串常量池、Class常量池和运行时常量池。通过查阅CSDN、博客园等相关资料,对这些常量池的特性、用途及其相互关系进行了详细探讨。本文将深入分析这三种常量池的差异与联系,帮助读者更好地理解Java虚拟机的内部机制。 ... [详细]
  • 基于Dubbo与Zipkin的微服务调用链路监控解决方案
    本文提出了一种基于Dubbo与Zipkin的微服务调用链路监控解决方案。通过抽象配置层,支持HTTP和Kafka两种数据上报方式,实现了灵活且高效的调用链路追踪。该方案不仅提升了系统的可维护性和扩展性,还为故障排查提供了强大的支持。 ... [详细]
  • 负载均衡基础概念与技术解析
    随着互联网应用的不断扩展,用户流量激增,业务复杂度显著提升,单一服务器已难以应对日益增长的负载需求。负载均衡技术应运而生,通过将请求合理分配到多个服务器,有效提高系统的可用性和响应速度。本文将深入探讨负载均衡的基本概念和技术原理,分析其在现代互联网架构中的重要性及应用场景。 ... [详细]
author-avatar
山海
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有