gpt4 book ai didi

symfony - 如何使用 Consul 服务发现处理 Symfony2 的运行时配置

转载 作者:行者123 更新时间:2023-12-04 02:18:49 25 4
gpt4 key购买 nike

我们的团队目前正在探索使用 Consul 为 Symfony2 应用程序发现服务的想法。处于相对前沿,讨论的方式很少。到目前为止,我们已经发现:

  • 运行时配置 has previously been shot down .
  • bundle exists处理这样的用例,但最近也没有看到很多事件。
  • contributors of said bundle suggested其中之一那个External Parameters可能是问题的答案。
  • Sensio 创建了它的 own Consul SDK .然而,关于文档/官方博客文章的方式似乎很少:Symfony2 集成
  • 控制台 provides watches可以在各种变化时触发

  • 当前的想法是探索利用 Consul 观察者重新触发缓存构建以及外部参数。也就是说,如果服务半频繁地更改,则对此类操作的开销存在一些担忧。

    基于以上内容以及对 Consul/Symfony 内部结构的了解,这是否是一种可取的方法?如果没有,为什么?有哪些替代方案?

    最佳答案

    在我工作的公司,我们采取了不同的路线。

    我们决定让 Consul 更新 Symfony 配置,而不是与 Symfony 对抗以接受运行时配置(例如,它应该更新 Symfony 配置,在概念上类似,在实现上与 Frank 不同。

    我们安装了 Consul 和 Consul Template。我们创建了一个包含整个 parameters.yml 文件的 K/V 条目对。例子:

    key :eblock/config/parameters.yml

    parameters:
    router.request_context.host: dev.eblock.ca
    router.request_context.scheme: http
    router.request_context.base_url: /

    然后在位置 /opt/consul-template/config/eblock.cfg 添加了一个 consul 模板配置文件:
    template {
    source = "/opt/consul-template/templates/eblock-parameters.yml.ctmpl"
    destination = "/var/www/eblock/app/config/parameters.yml"
    command = "/opt/eblock/scripts/parameters_updated.sh"
    }

    ctmpl文件内容为:
    {{key "eblock/config/parameters.yml"}}

    最后,我们的 parameters_updated.sh脚本执行:
    #!/bin/bash

    readonly PROGNAME=$(basename "$0")
    readonly LOCKFILE_DIR=/tmp
    readonly LOCK_FD=201

    lock() {
    local prefix=$1
    local fd=${2:-$LOCK_FD}
    local lock_file=$LOCKFILE_DIR/$prefix.lock

    # create lock file
    eval "exec $fd>$lock_file"

    # acquire the lock
    flock -n $fd \
    && return 0 \
    || return 1
    }

    lock $PROGNAME || exit 0

    export HOME=/root
    logger "Starting composer install" && \
    /usr/local/bin/composer install -d=/var/www/eblock/ --no-interaction && \
    logger "Running composer dump-autoload" && \
    /usr/local/bin/composer dump-autoload -d=/var/www/eblock/--optimize && \
    logger "Running app/console c:c/c:w" && \
    /usr/bin/php /var/www/eblock/app/console c:c -e=prod --no-warmup && \
    /usr/bin/php /var/www/eblock/app/console c:w -e=prod && \
    logger "Running doctrine commands" && \
    /usr/bin/php /var/www/eblock/app/console doctrine:database:create --env=prod --if-not-exists && \
    /usr/bin/php /var/www/eblock/app/console doctrine:migrations:migrate -n --env=prod && \
    logger "Restarting php-fpm" && \
    /bin/systemctl restart php-fpm &

    知道 consul 和 consul-template 服务都已启动,一旦您的值在 consul 模板的指定键中发生更改,它就会将文件转储到配置的目的地并运行命令更新参数。

    它就像一个魅力。 =)

    关于symfony - 如何使用 Consul 服务发现处理 Symfony2 的运行时配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32741631/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com