[英]Spring cloud : Can not get Feign client to work with consul
我正在嘗試設置一個簡單的 spring cloud consul 應用程序。
我有一個“分發”服務並在領事中注冊(spring.application.name 屬性設置為“分發”)
我有一個“獲取”服務,它試圖使用 feign 調用“分發”服務。
這是我的主課
@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);
}
}
這是我的假客戶
@FeignClient(value = "distribution")
interface DistributionClient {
@RequestMapping(method = RequestMethod.POST, value = "/data", consumes = "application/json")
void sendData(Data data);
}
這是我的 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>
當我請求“/disco”Url 時,“分發”服務的 url 被正確檢索,這意味着整個發現事情按預期工作。
但是,當我請求“/use-feign”網址時,出現以下異常:
com.netflix.client.ClientException:負載平衡器沒有客戶端可用的服務器:在 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.LoadBalancerCommand$1。 call(LoadBalancerCommand.java:180) ~[ribbon-loadbalancer-2.2.0.jar:2.2.0] at 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.call(OnSubscribeConcatMap.java:42) ~ [rxjava-1.1.5.jar:1.1.5]
我缺少任何配置嗎?
謝謝你的幫助。
spencergibb指出了問題:沒有部署健康檢查端點。 只需將 spring-boot-actuator 添加到依賴項即可解決問題。
就我而言,我有: spring-boot (2.4.2)
和spring-cloud 2020.0.1
,我剛剛添加了:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.