Ich versuche, eine einfache Feder Cloud Consul App einrichten.Spring cloud: Ich kann nicht bekommen, Feign Client mit Consul arbeiten
Ich habe einen „Verteilung“ Service und in Konsul registriert (mit spring.application.name Eigenschaft auf „distribution“)
Ich habe einen „Erwerb“ Service, um einen Anruf zu machen versucht, der "Verteilungs" -Dienst unter Verwendung von Schein.
Hier ist meine Hauptklasse
@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);
}
}
hier mein feign Client
@FeignClient(value = "distribution")
interface DistributionClient {
@RequestMapping(method = RequestMethod.POST, value = "/data", consumes = "application/json")
void sendData(Data data);
}
und hier ist mein 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>
Als ich die "/ Disco"
ist anfordern Url, die URL des Dienstes "Distribution" wird ordnungsgemäß abgerufen, was bedeutet, dass die gesamte Erkennungsfunktion wie erwartet funktioniert ed.Aber, wenn ich die "/ use-heucheln" URL-Anforderung, erhalte ich die folgende Ausnahme:
com.netflix.client.ClientException: Load Balancer nicht über verfügbaren Server für Client: Verteilung um com.netflix.loadbalancer.LoadBalancerContext.getServerFromLoadBalancer (LoadBalancerContext.java:468) ~ [Multifunktionsleiste-loadbalancer-2.2.0.jar: 2.2.0] um com.netflix.loadbalancer.reactive.LoadBalancerCommand $ 1.call (LoadBalancerCommand.java:184) ~ [Farbband-Loadbalancer-2.2.0.jar: 2.2.0] um com.netflix.loadbalancer.reactive.LoadBalancerC ommand $ 1.call (LoadBalancerCommand.java:180) ~ [band-loadbalancer-2.2.0.jar: 2.2.0] um rx.Observable.unsafeSubscribe (Observable.java:8460) ~ [rxjava-1.1.5 .jar: 1.1.5] unter rx.internal.operators.OnSubscribeConcatMap.call (OnSubscribeConcatMap.java:94) ~ [rxjava-1.1.5.jar: 1.1.5] unter rx.internal.operators.OnSubscribeConcatMap. nennen (OnSubscribeConcatMap.java:42) ~ [rxjava-1.1.5.jar: 1.1.5]
Fehle ich jede Konfiguration?
Vielen Dank für Ihre Hilfe.
Haben Sie spring.application.name in bootstrap.yml eingegeben? – spencergibb
Ja, in der App "distribution" setze ich spring.application.name: distribution und in der App "acquisition" setze spring.application.name: acquisition. Und ich kann sehen, beide Dienste in Consul registriert – couettos
Können Sie ein Projekt teilen? – spencergibb