前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RabbitMQ——配置文件

RabbitMQ——配置文件

作者头像
陈猿解码
发布2023-02-28 14:12:29
9790
发布2023-02-28 14:12:29
举报
文章被收录于专栏:陈猿解码陈猿解码

3.7.0版本之前的配置文件采用经典格式,或者称之为erlang term的方式(下面统称为经典格式),其配置文件的后缀为".config",例如:

代码语言:javascript
复制
[
  {rabbit,
    [ 
      {tcp_listeners, [5672]},
      {connection_max, 3000}
    ]
  }
].

经典格式的配置文件对于刚开始使用rabbitmq的用户并不是非常友好,因为一些必须的","和"."、"[]"和"{}"的不同嵌套,这些虽然都是erlang的基本语法,但对于不熟悉erlang的用户会感到困惑,配置起来会显得略复杂,甚至容易出错。

从3.7.0版本开始,rabbitmq推出了新格式的配置文件,配置文件采用KV键值对的格式(下面统称为KV格式),其配置文件的后缀为".conf",例如:

代码语言:javascript
复制
# this is a comment
listeners.tcp.default = 5672

相比经典格式,KV格式的配置文件简介明了,同时更具可读性与维护性。


然而使用过程中,也还是会遇到一些问题。最常见的就是:有哪些配置项、经典格式中的配置项在KV格式下对应的配置项名称是什么?

虽然这些问题,多看几次官方文档,或者参考github中给出的示例文件基本就能够解决了。但随着使用的深入,可能需要对更多配置参数进行设置调优时,会发现一些在经典格式中存在的配置项,在KV格式中却找不到其对应的配置项。

例如用于设置队列索引日志条数queue_index_max_journal_entries,设置读写文件是否启用缓存的fhc_write_buffering,fhc_read_buffering等配置项。在KV格式的配置文件中就没有对应的配置项。

甚至一些“隐藏”的配置项(rabbit.app文件中的内容在经典格式配置中均可以进行配置)在KV格式的配置文件中也不一定有对应的配置项。

尽管我们还是可以使用经典格式的配置文件,或者直接修改"rabbit.app"中的内容来达到相应的目的。但始终存在一些疑惑,难道KV格式的配置文件真的不能支持所有的配置项吗?rabbitmq内部对KV格式的配置项又是怎么进行解析处理的?难不成将配置项都硬编码写死了?


答案当然是否定的,实际上,rabbitmq在启动时,会判断配置文件名的后缀,发现如果是KV格式的配置文件,则使用sbin目录下的"cuttlefish"对其进行解析并重新生成一份经典格式的配置文件,然后加载这个重新生成的配置文件得到各个配置项的值。官方文档其实也有相应的说明:

仔细观察下rabbitmq的启动参数,对于采用KV格式的配置文件,会通过-conf参数指定使用的配置文件的具体路径,通过-conf_dir指定重新生成的配置文件的路径。在这个路径下的generated目录,存放重新生成的经典格式的配置文件。

而cuttlefish将KV格式的配置文件解析成经典格式配置文件的关键在于schema文件,这里保存了两个配置文件中配置项名称的映射关系。下图为rabbit.schema文件中摘取的一部分,通过mapping指定映射关系。

了解到了这些后,我们可以按照对应的格式,在schema文件中添加相应的映射关系,这样就可以在KV格式的配置文件中进行正确的配置了。

有关cuttlefish的更多介绍以及scheam的语法规范,这里不展开说明,感兴趣的朋友可以上网搜索了解更多信息。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 陈猿解码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档