当前位置: 首页 > 知识库问答 >
问题:

Spring cloud Eureka服务器没有相互复制,显示警告

弓温书
2023-03-14
server:
  port: ${server.instance.port:5678}
spring:
  application:
    name: nodeservice

sidecar:
  port: ${nodeserver.instance.port:3000}
  health-uri: http://localhost:${nodeserver.instance.port:3000}/health.json

eureka:
  instance:
    hostname: ${nodeserver.instance.name:localhost}
    preferIpAddress: ${preferipaddress:false}
    leaseRenewalIntervalInSeconds: 5 #default is 30, recommended to keep default
    metadataMap:
      instanceId: ${spring.application.name}:${spring.application.instance_id:${random.value}}
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/

知道为什么吗?

共有1个答案

赖星驰
2023-03-14

Eureka:只注册第一个成功的URL。在您的示例中,第一个成功的url是http://localhost:8761/eureka/,因此不能继续注册下一个url http://localhost:8762/eureka/。

您可以通过以下方法重写:

application.yml

 eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
      additionalZones: http://localhost:8762/eureka
@SpringBootApplication
@EnableEurekaClient
public class Application implements ApplicationContextAware {


    @Value("${eureka.client.serviceUrl.additionalZones:}")
    String additionalZones;

    ConfigurableApplicationContext applicationContext;

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Bean
    public Map<String, EurekaClient> additionalEurekaClients(ApplicationInfoManager manager,
                                                             @Autowired(required = false) HealthCheckHandler healthCheckHandler) {
        HashMap clients = new HashMap<>();

        if(Text.isEmpty(additionalZones))
            return clients;

        String[] hosts = additionalZones.split(",");
        for(int i=0; i < hosts.length; i++)
        {
            EurekaClient client = new CloudEurekaClient(manager, new SimpleEurekaClientConfig(hosts[i].trim(),"defaultZone"), null,
                    this.applicationContext);
            client.registerHealthCheck(healthCheckHandler);
            String clientName = "client_"+ (i+1);
            clients.put(clientName, client);
        }

        return clients;
    }


    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = (ConfigurableApplicationContext) applicationContext;
    }


    @PreDestroy
    public void unRegisterInAllConfiguredDiscovery() {
        Map<String, EurekaClient> additionalEurekaClients = this.applicationContext.getBean("additionalEurekaClients", Map.class);
        additionalEurekaClients.forEach((k, v) -> v.shutdown());
    }
}
package com.netflix.eureka;

import org.springframework.cloud.netflix.eureka.EurekaClientConfigBean;
import java.util.Arrays;
import java.util.List;

public class SimpleEurekaClientConfig extends EurekaClientConfigBean {

    private String eurekaUrl;
    private String zone;
    private String region = "us-east-1";

    public SimpleEurekaClientConfig(String eurekaUrl, String zone, String region) {
        this.eurekaUrl = eurekaUrl;
        this.zone = zone;
        this.region = region;
    }

    public SimpleEurekaClientConfig(String eurekaUrl, String zone) {
        this.eurekaUrl = eurekaUrl;
        this.zone = zone;
    }


    @Override
    public String getRegion() {
        return region;
    }

    @Override
    public String[] getAvailabilityZones(String s) {
        return new String[] {zone};
    }

    @Override
    public List<String> getEurekaServerServiceUrls(String s) {
        return Arrays.asList(eurekaUrl);
    }

    @Override
    public boolean shouldEnforceRegistrationAtInit() {
        return true;
    }

    @Override
    public boolean shouldRegisterWithEureka() {
        return true;
    }
}
 类似资料:
  • 我知道你可以通过从批处理文件或类似文件中调用jar来将它作为Windows服务运行,而且我知道当你使用一个应用服务器,如WAS或Glassfish时,你有JVMS本身正在“运行”。但除非我弄错了,否则这些不一定是“服务”。也就是说,在没有任何用户输入的情况下执行的进程。根据我的理解,你仍然需要调用JVM来让它执行一个进程(如果我错了,请随时纠正我)。但我一直很好奇什么是Windows服务的Java

  • 我试图创建一个JPA项目,eclipse确实连接到数据库,但是没有显示任何表。数据库确实有表,用户“约翰”拥有数据库中的所有许可。从提示符或使用MySQL客户端执行查询没有问题。 下面是"驱动程序属性"中的连接设置: 驱动程序:MySQL JDBC驱动程序 数据库:myDatabase URL:JDBC:mysql://localhost:3306 用户名:john 密码:****** “测试连接

  • 我在一个项目中使用java scala(与sbt一起)。 语言信息: 当我运行任何时,我得到一个奇怪的警告提示: 我无法理解这种行为。 更新: 我检查了 选项,它具有相同的行为: 感谢这么快的解释1.8Java新功能! 但是如何解决警告的发生? 以下是的内容: Eclipse有< code>eclipse.ini: 更新2 我从两个配置文件中删除了包含的所有行。 但是这个错误警告一直出现(当<co

  • 当我试图在Eclipse v3.8中添加新服务器时,所有Apache Tomcat版本都列在选择服务器选项中,只有v8.0: 我检查了JST服务器适配器和JST服务器适配器扩展是否已经安装。 我需要Apache Tomcat v8.0,我该怎么做? PS:我用的是Xubuntu。

  • 问题内容: 我目前正在使用dropzone.js v3.10.2,但在显示已上传的现有文件时遇到问题。我比php更加胜任,但是关于ajax和js的知识却很有限 如果您能帮助的话,那太好了 提前致谢 index.php upload.php PS。我知道PHP正在检索数据 提前致谢 达米安 问题答案: 我检查了代码(来自starTutorial),它对我也不起作用(?) 我设法通过替换它来使其工作:

  • 问题内容: 我有一个非常简单的RESTful控制器,可以使用并生成JSON。我需要脱机测试此控制器,即没有服务器运行,也没有数据库运行。而且我为无法找到解决方案而发疯。我的初始测试用例将包括: 测试REST URI,即GET,POST,PUT,DELETE-我必须能够根据发送的数据声明返回的数据。 断言将测试JSON数据 我有以下URI: / pcusers-返回所有用户 / pcusers /