2016-06-26 1 views
1

J'essaie de mettre en place une application de printemps nuage simple consul.Printemps nuage: Ne peut pas obtenir Feign client à travailler avec le consul

J'ai un service « distribution » et enregistré au consul (avec la propriété spring.application.name réglé sur « distribution ») Service

j'ai une « acquisition » qui tente de faire un appel à le service "distribution" utilisant feign.

Voici ma classe principale

@Configuration 
@EnableAutoConfiguration 
@EnableDiscoveryClient 
@RestController 
@EnableFeignClients 
@EnableHystrix 
public class Acquisition { 


    @Autowired 
    private DiscoveryClient discoveryClient; 

    @Autowired 
    private DistributionClient distributionClient; 


    @RequestMapping("/use-feign") 
    public String sendData() { 
     distributionClient.sendData(new Data("Hello World")); 
     return "sent"; 
    } 

    @RequestMapping("/disco") 
    public String disco() { 
     List<ServiceInstance> list = discoveryClient.getInstances("distribution"); 
     if (list != null && list.size() > 0) { 
      return list.get(0).getUri().toString(); 
     } 
     return null; 
    } 

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

} 

ici est mon client feindre

@FeignClient(value = "distribution") 
interface DistributionClient { 

    @RequestMapping(method = RequestMethod.POST, value = "/data", consumes = "application/json") 
    void sendData(Data data); 
} 

et voici mon pom.xml

<dependencies> 
    <dependency> 
     <groupId>org.springframework.cloud</groupId> 
     <artifactId>spring-cloud-starter-consul-all</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.cloud</groupId> 
     <artifactId>spring-cloud-starter-feign</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.cloud</groupId> 
     <artifactId>spring-cloud-starter-hystrix</artifactId> 
    </dependency> 
</dependencies> 

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.springframework.cloud</groupId> 
      <artifactId>spring-cloud-consul-dependencies</artifactId> 
      <version>1.0.1.RELEASE</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

Quand je demande le "/ disco" Url, l'URL du service "distribution" est correctement récupérée, ce qui signifie que l'ensemble de la découverte fonctionne comme prévu éd.

Mais, quand je demande l'URL "/ use-feindre", je reçois l'exception suivante:

com.netflix.client.ClientException: équilibreur de charge n'a pas serveur disponible pour le client: la distribution au com.netflix.loadbalancer.LoadBalancerContext.getServerFromLoadBalancer (LoadBalancerContext.java:468) ~ [ribbon-loadbalancer-2.2.0.jar: 2.2.0] à com.netflix.loadbalancer.reactive.LoadBalancerCommand $ 1.call (LoadBalancerCommand.java:184) ~ [ribbon-loadbalancer-2.2.0.jar: 2.2.0] à com.netflix.loadbalancer.reactive.LoadBalancerC Commande $ 1.call (LoadBalancerCommand.java:180) ~ [ribbon-loadbalancer-2.2.0.jar: 2.2.0] à rx.Observable.unsafeSubscribe (Observable.java:8460) ~ [rxjava-1.1.5 .jar: 1.1.5] à rx.internal.operators.OnSubscribeConcatMap.call (OnSubscribeConcatMap.java:94) ~ [rxjava-1.1.5.jar: 1.1.5] à rx.internal.operators.OnSubscribeConcatMap. appeler (OnSubscribeConcatMap.java:42) ~ [rxjava-1.1.5.jar: 1.1.5]

Suis-je manque une configuration?

Merci pour votre aide.

+0

Avez-vous mis spring.application.name dans bootstrap.yml? – spencergibb

+0

oui, dans l'application "distribution", j'ai mis spring.application.name: distribution et dans l'application "acquisition", j'ai mis spring.application.name: acquisition. Et je peux voir les deux services enregistrés dans le consul – couettos

+0

Pouvez-vous partager un projet? – spencergibb

Répondre

0

spencergibb a souligné le problème: aucun point de fin de contrôle d'intégrité n'a été déployé. Le simple fait d'ajouter spring-boot-actuator aux dépendances a résolu le problème.