Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用领事服务发现处理Symfony2的运行时配置_Symfony_Service Discovery_Consul_12factor_Runtime Configuration - Fatal编程技术网

如何使用领事服务发现处理Symfony2的运行时配置

如何使用领事服务发现处理Symfony2的运行时配置,symfony,service-discovery,consul,12factor,runtime-configuration,Symfony,Service Discovery,Consul,12factor,Runtime Configuration,我们的团队目前正在探索使用Concur为Symfony2应用程序进行服务发现的想法。由于处于相对前沿,讨论的方式很少。到目前为止,我们发现: 运行时配置 一个开发人员需要处理这样一个用例,但到目前为止还没有看到太多的活动 其中一个可能就是这个问题的答案 Sensio已经创造了自己的品牌。然而,在文档/官方博客文章的整合方面似乎很少 控制台,可在各种更改时触发 当前的想法是探索利用concur观察器与外部参数一起重新触发缓存构建。也就是说,如果服务半频繁地更改,那么这种操作的开销会引起一些关注

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

  • 运行时配置
  • 一个开发人员需要处理这样一个用例,但到目前为止还没有看到太多的活动
  • 其中一个可能就是这个问题的答案
  • Sensio已经创造了自己的品牌。然而,在文档/官方博客文章的整合方面似乎很少
  • 控制台,可在各种更改时触发
当前的想法是探索利用concur观察器与外部参数一起重新触发缓存构建。也就是说,如果服务半频繁地更改,那么这种操作的开销会引起一些关注


基于上述情况,以及对Concur/Symfony内部结构的了解,这是一种可取的方法吗?如果没有,原因是什么,还有什么替代方案可用?

一个简单的KV观察程序,它将值放入parameters.yml,触发一个缓存:clear在我看来是最简单的选项,并且还提供了编译的好处,这样它就不必每次都去Consour检查值是否更新。正如您所说,有些开销,但如果您不每5分钟更改一次参数,似乎就可以了

我们正在探索这一选择,但如果您在这方面取得任何进展,将不胜感激


[更新2016-02-23]我们已经实施了我上面提到的想法,并且按照预期效果运行:很好。请注意,我们仅在部署新版本时更改参数(因为我们还使用Consor的服务发现,所以无需更新参数中的服务列表)。我们之所以这么做,主要是因为它省去了在多台服务器上更改参数的枯燥工作。像往常一样:这可能对你不起作用,但我认为如果你像我之前说的那样,不每隔5分钟更改一次参数,你会很安全:)

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

我们没有反对Symfony接受运行时配置(它应该这样做,比如SpringDataConcur),而是决定让Concur更新Symfony配置,在概念上与Frank类似,在实现上与Frank不同

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

键:
eblock/config/parameters.yml

parameters:
    router.request_context.host: dev.eblock.ca
    router.request_context.scheme: http
    router.request_context.base_url: /
然后在位置
/opt/consu template/config/eblock.cfg
添加了一个领事模板配置文件:

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"}}
最后,我们的
参数\u 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 &
知道concur和concur template服务都已启动,只要您的值在concur template的指定键中发生更改,它就会将文件转储到配置的目标中,并运行命令以更新参数


它就像一个符咒

如果您有新问题,请单击按钮提问。如果你有足够的声誉,问题就来了。或者,“星”它作为一个最喜欢的,你会被告知任何新的答案。我可能会误解,但这对我来说是一个与这个主题相关的问题。我要求更新他自己的问题,而不是让任何其他人回答(尽管那会很好),所以这是一个评论,评论可能不会作为答案发布在StackOverflow上。用户通过提问、回答和编辑活动参与。请阅读我之前评论中的链接。“这解释了为什么。”弗兰克评论道,这有点像是一个鸡蛋的场景。我自己也有一点挑战。关于你的问题,我们到目前为止还没有继续探讨这个问题。它被放在后台,因为我们的concur值目前保持相当稳定。如果你最终选择了建议的路线,并根据你的发现更新了这个答案,我认为这将是一个很好的答案,更符合Tunaki所提到的内容。我认为删除第一段并清理第二段,因为更多的是陈述,而不是问题,这是一个很好的方法。