RabbitMQ 教程 | 第6章 RabbitMQ 配置

news2024/11/24 17:38:42

👨🏻‍💻 热爱摄影的程序员
👨🏻‍🎨 喜欢编码的设计师
🧕🏻 擅长设计的剪辑师
🧑🏻‍🏫 一位高冷无情的编码爱好者
大家好,我是 DevOps 工程师
欢迎分享 / 收藏 / 赞 / 在看!

这篇 RabbitMQ 教程为学习者提供了全面的内容,从 RabbitMQ 的简介开始,涵盖了消息中间件的概念、RabbitMQ 的安装与使用,以及交换机、队列、路由键等相关概念的介绍。进一步深入,教程探讨了 AMQP 协议、客户端开发向导,以及消息的发送和消费方式。同时,学习者还可以了解消息传输保障、高级特性如死信队列、延迟队列、优先级队列、RPC 实现等。此外,教程还涵盖了 RabbitMQ 的管理、配置、运维、监控和集群管理等重要主题,帮助学习者充分掌握 RabbitMQ 的应用。整篇教程丰富内容详实,适合初学者和有经验的开发者参考学习。

全篇共 11 章,9 万余字。本文:第6章 RabbitMQ 配置。

第6章 RabbitMQ 配置

6.1 环境变量

在 RabbitMQ 中,可以使用环境变量来配置和改变其运行行为和参数。通过设置环境变量,您可以在启动 RabbitMQ 应用时动态地配置不同的选项,而不需要修改配置文件。以下是如何使用环境变量配置 RabbitMQ 的方法:

  1. 设置环境变量: 在 Linux 或 Unix 系统上,可以使用 export 命令设置环境变量,例如:

export RABBITMQ_NODE_PORT=5673

在 Windows 系统上,可以使用 set 命令设置环境变量,例如:

  1. 常用的环境变量:
    • RABBITMQ_NODE_PORT:指定 RabbitMQ 节点的监听端口号。
    • RABBITMQ_NODENAME:指定 RabbitMQ 节点的名称。
    • RABBITMQ_NODE_IP_ADDRESS:指定 RabbitMQ 节点的IP地址。
    • RABBITMQ_MNESIA_BASE:指定 RabbitMQ 节点的 Mnesia 数据库存储路径。
    • RABBITMQ_LOG_BASE:指定 RabbitMQ 节点的日志存储路径。
    • RABBITMQ_USE_LONGNAME:设置为 true 时,节点使用完全限定的长名称。
    • RABBITMQ_CTL_ERL_ARGS:设置 RabbitMQ 控制台的 Erlang 参数。
  1. 示例: 假设您想将 RabbitMQ 节点的监听端口改为 5673,并使用完全限定的长名称,您可以通过以下方式设置环境变量:
export RABBITMQ_NODE_PORT=5673
export RABBITMQ_USE_LONGNAME=true
  1. 注意事项:
    • 环境变量的设置仅对当前会话生效,如果想要永久生效,可以将设置写入相关的配置文件中(如 .bashrc 或 .bash_profile)。
    • 如果同时在配置文件和环境变量中设置了相同的选项,环境变量会覆盖配置文件的设置。
    • 在使用环境变量时,请确保变量的值正确,避免影响 RabbitMQ 的正常运行。

使用环境变量配置 RabbitMQ 可以方便地改变其运行行为和参数,同时也便于在不同环境中快速切换配置。根据实际需求,您可以设置不同的环境变量来定制 RabbitMQ 的运行参数。

6.2 配置文件

使用配置文件是一种更为灵活和可扩展的方式来对 RabbitMQ 进行配置。配置文件可以包含多个选项和参数,而且可以根据实际需求进行修改和扩展。在 RabbitMQ 中,配置文件通常是 Erlang/OTP 格式的文件,也可以是 JSON 或其他格式的文件。下面介绍如何使用配置文件对 RabbitMQ 进行配置:

  1. 配置文件的位置: RabbitMQ 配置文件通常位于 /etc/rabbitmq/ 目录下,具体文件名可能是 rabbitmq.config 或 rabbitmq.conf。也可以在启动 RabbitMQ 应用时指定不同的配置文件。
  2. 配置文件的格式: RabbitMQ 配置文件采用 Erlang/OTP 格式,其语法类似于 Erlang 语言。例如,配置文件中的一个配置项可能如下所示:

{rabbit, [{loopback_users, []}]}.

  1. 常用配置项: RabbitMQ 的配置文件可以包含多个配置项,这些配置项用于配置不同的功能和行为。以下是一些常用的配置项:
    • rabbit:RabbitMQ 服务器的全局配置项,包含多个子项。
    • rabbitmq_management:RabbitMQ 管理插件的配置项,用于配置管理界面的访问权限等。
    • rabbitmq_mqtt:MQTT 插件的配置项,用于配置 MQTT 协议的相关参数。
    • rabbitmq_amqp1_0:AMQP 1.0 插件的配置项,用于配置 AMQP 1.0 协议的相关参数。
    • rabbitmq_stomp:STOMP 插件的配置项,用于配置 STOMP 协议的相关参数。
    • rabbitmq_web_stomp:Web STOMP 插件的配置项,用于配置 Web STOMP 协议的相关参数。
  1. 修改和扩展配置: 使用配置文件可以方便地修改和扩展 RabbitMQ 的配置。您可以在配置文件中添加新的配置项,或修改现有配置项的值。在修改配置文件后,重启 RabbitMQ 应用使配置生效。
  2. 示例: 下面是一个简单的 RabbitMQ 配置文件示例:
[  {rabbit, [    {loopback_users, []},
    {tcp_listeners, [{"0.0.0.0", 5672}]}
  ]}
].

上述配置文件中设置了 loopback_users 为空列表,表示允许所有用户通过 localhost 访问 RabbitMQ。同时设置了 tcp_listeners 为[{"0.0.0.0", 5672}],表示 RabbitMQ 监听在所有网络接口的 5672 端口上。

使用配置文件对 RabbitMQ 进行配置可以更好地定制服务器行为和功能。您可以根据实际需求修改和扩展配置项,灵活地调整 RabbitMQ 的运行参数。请注意,修改配置文件后,建议谨慎验证配置的正确性,并在修改前备份原配置文件,以防止配置错误导致服务器运行异常。

6.2.1 配置项

在 RabbitMQ 配置文件中,可以配置许多不同的选项来调整 RabbitMQ 服务器的行为和功能。下面介绍一些常见的配置项,涵盖了连接、通道、队列、交换机等方面的参数:

  1. 连接相关配置项:
    • listeners:指定 RabbitMQ 节点监听的网络接口和端口。例如:[{tcp, "0.0.0.0", 5672}]表示监听所有网络接口的 5672 端口。
    • ssl_listeners:指定 RabbitMQ 节点监听的 SSL 加密连接的网络接口和端口。
    • ssl_options:配置 SSL 连接的选项,包括 SSL 证书、私钥等。
    • loopback_users:设置允许通过 localhost 访问 RabbitMQ 的用户列表。
  1. 通道相关配置项:
    • frame_max:指定通道可以传输的最大帧大小,用于限制消息的大小。
    • channel_max:指定节点可以创建的最大通道数。
  1. 队列和交换机相关配置项:
    • default_vhost:设置 RabbitMQ 的默认虚拟主机名称。
    • default_user、default_pass:设置 RabbitMQ 的默认用户名和密码。
    • default_permissions:设置新创建虚拟主机的默认权限。
    • queue_master_locator:设置队列主节点的选择策略。
    • exchange_policies:配置交换机的策略,例如:[{vhost, regex, "^amq.", [{alternate-exchange, <<"my-alternate-exchange">>}]}, {vhost, exact, "/myvhost", [{alternate-exchange, <<"my-alternate-exchange">>}]} 设置以 ^amq. 开头或是虚拟主机为 /myvhost 的交换机,将 alternate-exchange 设置为 my-alternate-exchange。
  1. 集群相关配置项:
    • cluster_nodes:指定节点集群的其他节点。
  1. 日志相关配置项:
    • log_levels:设置不同组件的日志级别,可以控制日志的详细程度。
    • log_file:指定日志文件的位置。
    • log_rotate_size:设置日志文件的最大大小。
  1. 内存相关配置项:
    • vm_memory_high_watermark:设置内存使用的高水位线,当节点内存使用超过该值时,RabbitMQ 将采取流控措施。
  1. 集群故障检测和恢复相关配置项:
    • cluster_partition_handling:设置集群分区的处理方式,如 ignore、pause_minority、pause_if_all_down 或 autoheal。

以上仅是部分常见的配置项,实际上 RabbitMQ 提供了更多的配置选项,涵盖了服务器的各个方面。根据具体需求,您可以修改配置文件中的这些参数,来适配您的应用场景和性能需求。请注意,在修改配置文件前,建议备份原配置文件,以防止配置错误导致服务器运行异常。同时,配置文件的格式通常为 Erlang/OTP 格式,语法类似于 Erlang 语言,要谨慎处理和验证配置的正确性。

6.2.2 配置加密

在 RabbitMQ 中,可以对配置文件进行加密,以保障配置文件的安全性。加密配置文件可以防止配置信息被未授权的用户访问或修改,确保配置文件中的敏感信息不被泄露。以下是一种常用的方法来对 RabbitMQ 配置文件进行加密:

  1. 使用配置文件加密工具: 可以使用工具将配置文件进行加密,使其内容变得不可读。常见的工具有 Ansible Vault、HashiCorp Vault 等。这些工具通常提供了命令行界面和 API,使得加密和解密过程可以方便地进行。
  2. 加密配置文件: 使用配置文件加密工具,可以对 RabbitMQ 配置文件进行加密,生成加密后的配置文件。在使用工具时,需要指定加密所需的密钥或密码。这个密钥或密码通常只有授权的用户才能知道,确保加密后的配置文件的安全性。
  3. 解密配置文件: 在 RabbitMQ 服务器启动时,需要将加密后的配置文件解密,以便 RabbitMQ 应用可以读取配置信息。在解密过程中,需要使用与加密时相同的密钥或密码,确保正确解密。
  4. 配置文件位置: 加密后的配置文件应该放在安全的位置,仅授权的用户能够访问。建议将解密后的配置文件放在 /etc/rabbitmq/ 目录下,并设置合适的权限,以确保只有授权的用户能够读取配置文件。

需要注意的是,加密配置文件虽然提高了配置文件的安全性,但同时也增加了一些管理复杂性。在进行加密操作时,务必保管好密钥或密码,以防止丢失或泄露导致无法解密配置文件。另外,确保只有授权的用户能够访问解密后的配置文件,以保障配置信息的安全性。

除了加密配置文件,还可以考虑使用操作系统的访问控制权限来限制对配置文件的访问。在 Linux 或 Unix 系统上,可以使用 chmod 命令设置文件的权限,限制访问配置文件的用户和组。在 Windows 系统上,可以使用文件属性来设置访问权限。综合使用访问控制权限和加密,可以更好地保障 RabbitMQ 配置文件的安全性。

6.2.3 优化网络配置

通过配置网络参数可以优化 RabbitMQ 的性能,特别是在高负载和高并发的情况下。合理地配置网络参数可以提高消息传输的效率和稳定性,以及减少消息传输延迟。下面是一些常见的网络参数配置项,以及它们的优化方法:

  1. TCP 参数优化:
    • tcp_backlog:设置 TCP 监听队列的最大长度。较大的值可以减少连接请求被拒绝的可能性,特别是在高并发的情况下。默认值为 128,可以根据实际需求适度增大。
    • tcp_nodelay:启用 TCP_NODELAY 选项,禁用 Nagle 算法。在发送小的数据包时,禁用 Nagle 算法可以降低延迟,提高消息传输效率。在高延迟网络环境下,可以启用该选项。
  1. SSL 参数优化:
    • 如果使用 SSL 加密连接,可以配置相关的 SSL 参数来优化性能。例如,可以使用更高效的加密算法,减少加密负担。
  1. Erlang 虚拟机参数优化:
    • inet_dist_listen_min和inet_dist_listen_max:这两个参数用于设置 Erlang 虚拟机的分布式监听端口范围。如果 RabbitMQ 节点参与到集群中,可以适度增加端口范围,以防止监听端口不足的情况。
  1. 文件描述符限制:
    • 在高并发的情况下,RabbitMQ 可能会打开大量的文件描述符。可以通过操作系统的文件描述符限制来提高 RabbitMQ 的性能。例如,在 Linux 系统上,可以通过修改 /etc/security/limits.conf 文件来增大文件描述符限制。
  1. 网络缓冲区设置:
    • 可以调整系统的网络缓冲区大小,以适应高负载和高并发的场景。在 Linux 系统上,可以通过修改 /etc/sysctl.conf 文件来设置 TCP 的缓冲区大小。
  1. 网络拓扑优化:
    • 在架构设计时,考虑到网络拓扑结构可以对性能产生重要影响。例如,可以将生产者和消费者放置在相同的局域网内,减少跨网络的传输延迟。

优化网络参数可以提高 RabbitMQ 的性能和稳定性,但需要注意的是,网络参数的优化应该根据实际情况和性能测试结果来进行。不同的网络环境和应用场景可能需要不同的网络参数配置。在进行网络参数优化时,建议先进行性能测试,通过监测和分析系统的性能指标来评估优化效果。同时,要确保优化后的配置在生产环境中经过充分测试,以确保系统的稳定性和可靠性。

6.3 参数及策略

RabbitMQ 支持许多参数和策略配置,用于优化消息传递、队列管理和消息处理等方面的性能和功能。以下是一些常见的参数和策略配置:

  1. 消息过期时间(Message TTL):
    • 可以为消息设置过期时间,一旦消息在指定时间内未被消费,则自动被清理。这可以通过设置队列的 x-message-ttl 参数或通过为发布的消息设置 expiration 属性来实现。
  1. 队列长度限制(Queue Length Limit):
    • 可以为队列设置最大长度限制,当队列中的消息数量超过限制时,可以选择对新消息的处理方式,如丢弃最旧的消息或拒绝新的消息。这可以通过设置队列的 x-max-length 参数来实现。
  1. 队列长度限制策略(Queue Length Limit Policy):
    • 可以通过定义策略,对多个队列统一设置队列长度限制。这可以通过设置策略的 max-length 参数来实现。
  1. 镜像队列(Mirrored Queue):
    • 可以将队列设置为镜像队列,使得队列的消息在多个节点间进行镜像复制,以提高消息的可靠性和冗余。这可以通过设置队列的 x-ha-policy 参数为 all 来实现。
  1. 死信队列(Dead-Letter Queue):
    • 可以为队列设置死信交换机,当消息在队列中变成死信时,会被转发到指定的死信队列。这可以通过设置队列的 x-dead-letter-exchange 和 x-dead-letter-routing-key 参数来实现。
  1. 消息优先级(Message Priority):
    • 可以为消息设置优先级,使得重要的消息可以优先处理。这可以通过设置队列的 x-max-priority 参数和消息的 priority 属性来实现。
  1. 延迟队列(Delayed Queue):
    • 可以通过插件或额外的组件实现延迟队列,使得消息可以在指定的延迟时间后被投递到指定的队列。
  1. 备份交换机(Alternate Exchange):
    • 可以为交换机设置备份交换机,当消息无法被路由时,会被转发到备份交换机,以确保消息的可靠传递。
  1. 消息拒绝重新入队(Message Rejection and Requeueing):
    • 可以通过设置消费者的 basic.reject 或 basic.nack 操作来拒绝消息并将其重新入队,或是将其丢弃。
  1. 预取计数(Prefetch Count):
    • 可以控制消费者从队列中预先获取的消息数量,以实现负载均衡和优化消息处理。

以上仅是一些常见的参数和策略配置,RabbitMQ 还提供了更多的参数和策略用于定制化不同场景下的消息传递和处理需求。在使用这些参数和策略时,建议根据实际应用场景和性能需求进行调整和测试,以获得最优的配置效果。

6.4 小结

本章介绍了 RabbitMQ 的配置方式,包括环境变量、配置文件、参数及策略等内容。在下一章中,我们将学习 RabbitMQ 的运维,包括集群搭建、服务日志查看、单节点故障恢复、集群迁移等内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/820060.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

科大讯飞 - 基于论文摘要的文本分类与关键词抽取挑战赛(DataWhale-Camp)

文章目录 1、赛题信息2、解决方案2.1 飞桨Baseline&#xff08;提供代码&#xff09;2.2 Bert和调参2.3 chatGLMlora大模型 3、关于DataWhale-NLP 1、赛题信息 提交地址&#xff1a;https://challenge.xfyun.cn/topic/info?typeabstract-of-the-paper&chymfk4uU 项目题目…

我的会议(会议通知)

前言: 我们在实现了发布会议功能&#xff0c;我的会议功能的基础上&#xff0c;继续来实现会议通知的功能。 4.1实现的特色功能&#xff1a; 当有会议要参加时&#xff0c;通过查询会议通知可以知道会议的内容&#xff0c;以及当前会议状态&#xff08;未读&#xff09; 4.2思路…

在Linux中怎么查找文件

2023年8月1日&#xff0c;周二上午 目录 Linux的四种搜索命令find简要说明举例说明拓展阅读locate 简要说明举例说明whereis简要说明举例说明which简要说明举例说明 Linux的四种搜索命令 findlocate&#xff08;不一定内置有&#xff0c;可能要下载mlocate包&#xff09;wher…

【概念理解】HAL库的滴答定时器HAL_Delay()函数的实现原理

来源&#xff1a;bilibili视频 这里写目录标题 概述一、寄存器部分1. 控制和状态寄存器(STK_CTRL)2. 加载值寄存器&#xff08;STK_LOAD&#xff09;3.当前值寄存器&#xff08;STK_VAL&#xff09; 二、代码部分hal_delay()1. hal_initTick()滴答定时器的初始化2. 将七万二传…

Redis 客户端有哪些?

文章目录 JedisLettuceRedisson最佳实践 - 到底用哪个&#xff1f; Redis 最常见的 Java 客户端有两个&#xff0c;Jedis 和 Lettuce&#xff0c;高级客户端有 Redisson&#xff0c;见下图&#xff08;图源 Clients | Redis&#xff09; Jedis Github地址&#xff1a;redis/j…

Windows下安装Hive(包安装成功)

Windows下安装Hive Hive与Hadoop的版本选择很关键&#xff0c;千万不能选错&#xff0c;否则各种报错。一、Hive下载1.1、官网下载Hive1.2、网盘下载Hive 二、解压安装包&#xff0c;配置Hive环境变量2.1、环境变量新增&#xff1a;HIVE_HOME2.2、修改Path环境变量&#xff0c;…

Oracle免费在线编程:Oracle APEX

前提&#xff1a; 注意&#xff1a;你要有个梯子才能更稳定的访问。 不需要安装Oracle&#xff0c;但是需要注册。&#xff08;还算方便的&#xff09; 注册&登录过程 进入Oracle APEX官网&#xff0c;我们选择免费的APEX工作区即可&#xff0c;点击“免费注册”。在注册…

基于H5或者微信小程序开发GIS地图实战全套代码

1 下面有一定基础的可以不看 (1)第一篇请看 微信小程序开发天地图 (2)第二篇请看 http://GeoServer+PostgreSQL+PostGIS+Tomcat+QGIS一整套相关 (3)第三篇请看 有国产化需求的 (4)第四篇请看 支持国家EPSG:4490 2 vue+openlayers实例代码

ThreadLocal原理

ThreadLocal原理 ThreadLocal对象new出来存放到堆中&#xff0c;ThreadLocal引用是存放在栈里 Thread 类有个 ThreadLocalMap 成员变量&#xff0c;Map的key是Threadlocal 对象&#xff0c;value是你要存放的线程局部变量。 public void set(T value) {//获取当前线程Thread&…

SpringBoot复习:(11)SpringApplication中的listeners成员变量是怎么初始化的?

initializers成员变量定义如下&#xff1a; 在构造方法中&#xff1a; setListeners代码如下&#xff1a; 给setListeners方法传递的是getSpringFactoriesInstances(ApplicationListener.class). getSpringFactoriesInstances代码如下&#xff1a; 调用的重载的getSpringFa…

redis 高级篇4 分布式锁

一 redis架构图 1.1 redis的架构图 1.2 分布式锁满足条件 1.独占性&#xff1b;2.高可用&#xff1b;3.防死锁&#xff1b;4.不乱抢&#xff1b;5.重入性 二 分布式锁的案例情况 2.1 分布式锁1:单机分布式部署 描述&#xff1a; 使用lock锁和synchronized&#xff0c;单机…

【shell】获取ping的时延数据并分析网络情况及常用命令学习

文章目录 获取ping的时延数据并分析网络情况|、||、&、&&辨析teetailkillall 获取ping的时延数据并分析网络情况 网络情况经常让我们头疼&#xff0c;每次都需要手动在终端ping太麻烦了&#xff0c;不如写个脚本ping并将数据带上时间戳存入文件&#xff0c;然后也…

iPhone 6透明屏是什么?原理、特点、优势

iPhone 6透明屏是一种特殊的屏幕技术&#xff0c;它能够使手机屏幕变得透明&#xff0c;让用户能够透过屏幕看到手机背后的物体。 这种技术在科幻电影中经常出现&#xff0c;给人一种未来科技的感觉。下面将介绍iPhone 6透明屏的原理、特点以及可能的应用。 iPhone 6透明屏的原…

【外卖系统】新增菜品

需求分析 在后台中&#xff0c;通过新增功能来添加一个新的菜品&#xff0c;在添加菜品时需要选择当前菜品所属的菜品分类&#xff0c;并且需要上传的菜品图片。 代码开发 需要添加的类和基本接口&#xff1a;实体类DishFlavor、Mapper接口DishFlavorMapper、业务层接口Dish…

顶尖211,央企收割机!面试仅16%!超线30分,稳稳上岸!

一、学校及专业介绍 南京理工大学&#xff08;Nanjing University of Science and Technology&#xff09;&#xff0c;简称南理&#xff0c;位于南京市&#xff0c;是隶属于工业和信息化部的全国重点大学&#xff0c;是国家“双一流”建设高校&#xff0c;“211工程”。由于学…

百模征战,如何解决数据卡脖子问题?

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 继ChatGPT以来&#xff0c;大模型在国内掀起了一股热潮&#xff0c;大有百模征战之意。而其中数据、算法、算力作为大模型训练的三驾马车&#xff0c;预训练数据的数量、质量、多样性成为大模型能力表现的关键性因素&#x…

8.Winform界面打包成DLL提供给其他的项目使用

背景 希望集成一个Winform的框架&#xff0c;提供权限菜单&#xff0c;根据权限出现各个Winform子系统的菜单界面。不希望把所有的界面都放放在同一个解决方案下面。用各个子系统建立不同的解决方案&#xff0c;建立代码仓库&#xff0c;进行管理。 实现方式 将Winform的UI界…

Linux系统使用(超详细,暑假弯道超车!!)

目录 Linux操作系统简介 Linux和windows区别 Linux常见命令 Linux目录结构 Linux命令提示符 常用命令 ls cd pwd touch cat echo mkdir rm cp mv vim vim的基本使用 grep netstat Linux面试题 Linux操作系统简介 Linux操作系统是和windows操作系统是并列的关系。只不过只…

牛客网Verilog刷题——VL54

牛客网Verilog刷题——VL54 题目答案 题目 实现一个深度为8&#xff0c;位宽为4bit的双端口RAM&#xff0c;数据全部初始化为0000。具有两组端口&#xff0c;分别用于读数据和写数据&#xff0c;读写操作可以同时进行。当读数据指示信号read_en有效时&#xff0c;通过读地址信号…

SpringBoot 集成Swagger2

一、入门 1、导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><!-- https://mvnrepository.com…