【问题标题】:Set Instance level environment variables in Cloud Foundry while scaling application在扩展应用程序时在 Cloud Foundry 中设置实例级环境变量
【发布时间】:2019-09-19 12:47:46
【问题描述】:

当我们水平缩放它时,我正在考虑将环境变量传递/设置给 Cloud Foundry 实例的方法。用例是,我们有一个使用 rabbitMQ 的生产者应用程序和一个从队列中消费的消费者应用程序。我们希望消费者应用程序水平扩展。为此,我们计划使用 rabbitMQ 的"consistent-hash-exchange"。 问题是,我们计划将 3 个队列绑定到 3 个消费者实例,并且我们希望将每个队列名称传递给每个实例,以便它们之间存在一种一对一的映射。

1) 有什么方法可以在单个实例级别设置环境属性?

2) 这是正确的方法吗?

提前致谢,萨加尔

【问题讨论】:

    标签: spring-boot rabbitmq cloud-foundry


    【解决方案1】:

    1) 有什么方法可以在单个实例级别设置环境属性?

    cf cli 将告诉您需要重新暂存应用程序才能使对环境变量的更改生效。通常,您可以重新启动,除非您更改的环境变量会影响构建包/暂存期间发生的情况。

    我做了一个快速测试,似乎至少需要重新启动。如果我更改 env 变量并扩展我的应用程序,所有实例都具有原始 env 值。重新启动后,所有实例都具有新值。这可能是一件好事,因为您真的不希望为不同的应用程序实例设置不同的值,因为这可能会让人非常困惑。

    2) 这是正确的方法吗?

    可能不适用于 Cloud Foundry。我建议您在队列名称为模式的情况下做一些事情,例如“somequeue-. You can then pull the app instance number out of theVCAP_APPLICATION”环境变量,并使用它为每个应用程序实例获取唯一的队列名称,例如“somequeue-0”、“somequeue-1” ' 和 'somequeue-2'。

    否则,您需要让应用从配置服务器或数据库等某个位置查询队列名称。这样它就可以在启动时动态加载队列名称。

    希望有帮助!

    【讨论】:

    • 我可以尝试在配置服务器中使用队列名称。但同样,问题是,我需要让每个人都绑定到一个队列。但至少我可以这样。我会让你知道它是如何工作的。
    • 对于配置服务器,请参阅此部分关于重新加载属性,docs.pivotal.io/spring-cloud-services/3-0/common/config-server/…
    • 我已经有了配置服务器,但在这种情况下它没有多大帮助。现在我所做的是添加 2 manifest.yml 并将应用程序命名为 01 & 02 并通过 evn 添加队列名称。它是一种静态缩放方式,但让我们看看它是如何进行的。
    猜你喜欢
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 2018-11-13
    • 2019-07-12
    • 2012-10-03
    • 1970-01-01
    相关资源
    最近更新 更多