4

我正在玩 Spring Cloud 1.0.0.M3。我有我的 Eureka 以及我的配置服务器工作。我还有两个微服务:fancyserver 和 fancyribbon。服务器代码是标准的 Hello World:

@Configuration
@EnableAutoConfiguration
@RestController
@EnableEurekaClient
public class Application {
@RequestMapping("/")
  public String home() {
    return "Hello World ";
  }
  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }

}

花式丝带代码也很简单。它试图发现 fancyserver 并返回它的结果:

@Configuration
@EnableAutoConfiguration
@RestController
@EnableEurekaClient
public class RibbonClient {
  @Autowired
  private RestTemplate restTemplate;

  public RestTemplate getRestTemplate() {
    return restTemplate;
  }
  public void setRestTemplate(RestTemplate restTemplate) {
    this.restTemplate = restTemplate;
  }
 @RequestMapping("/")
  public String home() {
    return getRestTemplate().getForObject("http://fancyserver", String.class).toString() ;
  }
  public static void main(String[] args) {
    SpringApplication.run(RibbonClient.class, args);
  }
}

不幸的是,这不起作用。功能区客户端看不到服务器列表。这意味着它没有看到fancyserver。但是我知道 fancyserver 和 fancy client 都在 Eureka 注册。我可以在我的尤里卡服务器地址下看到它们:

http://localhost:7001/eureka/apps

编辑:可以在 pastebin 上看到 eureka 输出:http: //pastebin.com/vua8f4XR

我还尝试手动调用负载均衡器:

 ServiceInstance instance = loadBalancer.choose("fancyserver");
 fancyServerUri= URI.create(String.format("http://%s:%s", instance.getHost(), instance.getPort()));

这会导致相同的错误:

java.lang.IllegalStateException:无法找到服务的 ILoadBalancer:fancyserver 负载均衡器没有可用服务器:DynamicServerListLoadBalancer:{NFLoadBalancer:name=fancyserver,当前服务器列表=[],负载均衡器 stats=Zone stats:{},Server统计:[]}服务器列表:com.netflix.loadbalancer.ConfigurationBasedServerList@6a8dcefd

我的 application.yml 配置非常简单。对于花式服务器:

server:
   port: 9002
eureka:
  instance:
    virtualHostName: fancyserver
    appGroupName: fancyGroup

对于花式丝带:

server:
   port: 9003
eureka:
  instance:
     virtualHostName: fancyribbon
     appGroupName: fancyGroup
  client:
     region: default
     registryFetchIntervalSeconds: 5
     availabilityZones:
         default: ${APPLICATION_DOMAIN:${DOMAIN:defaultZone}}

bootstrap.yml 同样简单。对于花式服务器:

spring:
    application:
        name: fancyserver
    cloud:
        config:
            uri: http://localhost:8888

对于花式丝带:

spring:
    application:
        name: fancyribbon
    cloud:
        config:
            uri: http://localhost:8888

我想知道我错过了什么。为什么fancyribbon 看不到fancyserver?

编辑:配置服务器包括尤里卡的链接:

eureka:
    instance:
        leaseRenewalIntervalInSeconds: 10
    client:
        serviceUrl:
            defaultZone: http://localhost:7001/eureka/
4

1 回答 1

3

试试快照?Spencer 本周早些时候注意到,如果本地网络有域(例如,您有本地 DNS 或添加了 localhost 查找中不存在的假域的路由),则会产生奇怪的影响。我想我们已经为他修好了。

于 2014-12-12T17:34:28.597 回答