【问题标题】:Does Netflix Eureka support dynamically named Spring Boot applications?Netflix Eureka 是否支持动态命名的 Spring Boot 应用程序?
【发布时间】:2017-02-27 02:12:21
【问题描述】:

根据this article,Netflix 的 Eureka 服务注册表支持使用属性 spring.application.name 注册命名服务。例如:

spring.application.name=a-eureka-client

Spring-Boot/Eureka 是否支持基于以下模板模式的动态名称:

spring.application.name=a-eureka-client-####

因此,部署的前两个实例将注册为:

 a-eureka-client-0001
 a-eureka-client-0002

【问题讨论】:

  • 我很好奇...一旦您使用唯一名称注册了您的应用程序。您如何期望另一个想要调用该应用程序的应用程序?您是否希望其他应用程序使用全名?您所要求的似乎是一个非常奇怪的用例。
  • 我正在考虑一种“弹性云”类型的场景,其中每个a-eureka-client 实例都支持帐户,当a-eureka-client-0002 达到容量时,另一个实例将启动并注册为a-eureka-client-0003account-deployment-manager 然后会看到新的并开始为其分配帐户。当需要访问帐户的客户端时,它会首先查找拥有该帐户的服务器名称 (eureka-client-0003),然后查找该实例的坐标。

标签: spring-boot netflix-eureka


【解决方案1】:

除了命令行或通过环境变量外,还可以在必要时在 Java 中以编程方式进行设置,例如自动附加主机的 id。

<SomeName>Application.java(或ServletInitializer.java,当使用像Tomcat这样的容器时):

// ...
public static void main(String[] args) {
        // add this line
        System.setProperty("spring.application.name", "some dynamatically generated name");
        SpringApplication.run(<SomeName>Application.class, args);

【讨论】:

    【解决方案2】:

    如果你使用的是 spring boot,那么在 src/main/resources 文件夹中你必须有额外的 bootstrap.properties 文件和下面的行。 不要放入 application.properties 文件。

    spring.application.name=Car-Position-Tracker
    

    bootstrap.properties 文件是在加载应用程序上下文时读取的:参见 Spring-cloud 的参考手册

    并在POM中添加Build插件,由*.properties

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    
        <resources>
            <resource>
                <filtering>true</filtering>
                <directory>src/main/resources</directory>
                <includes>
                    <include>*.properties</include>
                </includes>
            </resource>     
        </resources>        
    </build>
    

    【讨论】:

      【解决方案3】:

      您可以通过命令行或环境变量传递spring.application.name 属性,如下所示:

      $ java -jar app.jar --spring.applocation.name=a-eureka-client-001

      或者

      $ export SPRING_APPLICATION_NAME=a-eureka-client-002

      $ java -jar app.jar

      或者,您可以提出一个名为 my.app.suffix 的自定义属性,将其作为命令行属性或环境变量注入,如上所示,然后在您的 application.properties(或 YML)中,使用后缀来完成名称您的应用程序:

      spring.application.name: a-eureka-client-${my.app.suffix:some-default}

      这样,你可以支持没有提供后缀的情况,在这种情况下,some-default将默认用作后缀。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-29
        • 1970-01-01
        • 2019-03-27
        • 1970-01-01
        • 2015-10-27
        • 2018-06-18
        相关资源
        最近更新 更多