尤里卡同行意识的例子不起作用

时间:2016-03-26 07:06:33

标签: java spring-boot netflix-eureka

我在运行Eureka服务器示例时遇到问题,以了解同伴意识概念。 我有以下Eureka服务:

package com.micro.eurekaserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableDiscoveryClient
@EnableEurekaServer
public class EurekaServerMicroServiceApplication {

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

application.yml

 ---
spring:
  profiles: peer1
server:
  port: 8761
eureka:
  instance:
    hostname: peer1
  client:
    serviceUrl:
      defaultZone: http://peer2:8762/eureka/

---
spring:
  profiles: peer2
server:
  port: 8762
eureka:
  instance:
    hostname: peer2
  client:
    serviceUrl:
      defaultZone: http://peer1:8761/eureka/

bootstrap.yml

spring:
  application:
    name: eureka

等/主机

127.0.0.1   peer1
127.0.0.1   peer2
localhost   peer1
localhost   peer2

当我运行此Eureka服务时,我不断得到以下异常:

2016-03-26 12:19:57.708 ERROR 4940 --- [主要]

com.netflix.discovery.DiscoveryClient    : Can't contact any eureka nodes - possibly a security group issue?

com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect
    at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187) ~[jersey-apache-client4-1.19.jar:1.19]
    at com.sun.jersey.api.client.filter.GZIPContentEncodingFilter.handle(GZIPContentEncodingFilter.java:123) ~[jersey-client-1.19.jar:1.19]
    at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27) ~[eureka-client-1.3.7.jar:1.3.7]
    at com.sun.jersey.api.client.Client.handle(Client.java:652) ~[jersey-client-1.19.jar:1.19]
    at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682) ~[jersey-client-1.19.jar:1.19]
    at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) ~[jersey-client-1.19.jar:1.19]
    at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:509) ~[jersey-client-1.19.jar:1.19]
    at com.netflix.discovery.DiscoveryClient.getUrl(DiscoveryClient.java:1802) [eureka-client-1.3.7.jar:1.3.7]
    at com.netflix.discovery.DiscoveryClient.makeRemoteCall(DiscoveryClient.java:1546) [eureka-client-1.3.7.jar:1.3.7]
    at com.netflix.discovery.DiscoveryClient.makeRemoteCallWithFollowRedirect(DiscoveryClient.java:1460) [eureka-client-1.3.7.jar:1.3.7]
    at com.netflix.discovery.DiscoveryClient.makeRemoteCall(DiscoveryClient.java:1443) [eureka-client-1.3.7.jar:1.3.7]
    at com.netflix.discovery.DiscoveryClient.makeRemoteCall(DiscoveryClient.java:1394) [eureka-client-1.3.7.jar:1.3.7]

2016-03-26 12:23:09.963 ERROR 4940 --- [tbeatExecutor-0] com.netflix.discovery.DiscoveryClient    : DiscoveryClient_EUREKA/KHUJEMA-PC:eureka - was unable to send heartbeat!

com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect
    at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187) ~[jersey-apache-client4-1.19.jar:1.19]
    at com.sun.jersey.api.client.filter.GZIPContentEncodingFilter.handle(GZIPContentEncodingFilter.java:123) ~[jersey-client-1.19.jar:1.19]
    at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27) ~[eureka-client-1.3.7.jar:1.3.7]
    at com.sun.jersey.api.client.Client.handle(Client.java:652) ~[jersey-client-1.19.jar:1.19]
    at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682) ~[jersey-client-1.19.jar:1.19]

我成功地使用单个实例运行Eureka服务。我只面临两个问题的问题。以下来自github的演示示例:[https://github.com/rcapraro/spring-cloud-sample][1]

我在日志中也注意到tomcat嵌入式服务器是在端口-8080上开始而不是8761/8762,不知道为什么?

请帮忙!

3 个答案:

答案 0 :(得分:0)

尝试从Application.java中删除@EnableDiscoveryClient。我看起来像这样:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class Application {

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

答案 1 :(得分:0)

如果Eureka仍然在8080上开始,那么您很可能没有通过有效的Spring个人资料。

每个实例都需要以:

开头
java -Dspring.profiles.active=peer1 target/<artifact>.jar

java -Dspring.profiles.active=peer2 target/<artifact>.jar
顺便说一下,我建议以不同的方式启动实例,我认为这不能很好地扩展,如果你需要启动第三个实例怎么办?使用此设置,您可能需要修改application.yml以添加第3个配置文件,请参阅问题?

我最近在博客上发表了关于Microservices Registration and Discovery using Spring Cloud Eureka Ribbon and Feign的博文,其中介绍了使用Eureka个人资料在standalonepeerAware模式下运行Spring的问题。在peerAware配置文件中,我使用VM参数传递其他Eureka实例的位置,因此无需更改代码即可启动新实例。它还包括使用FeignRibbonRestTemplate的负载均衡请求,客户端使用Jersey 1和Spring REST实现。

答案 2 :(得分:0)

我遇到了同样的问题,没有运气就做了很多搜索!

最后,我只是将个人资料修改为个人资料,它出人意料地有效:

spring:
  profile: peer1

而不是:

spring:
   profiles: peer1