【问题标题】:Spring cloud : Can not get Feign client to work with consulSpring Cloud:无法让 Feign 客户端与领事合作
【发布时间】:2016-10-28 20:06:12
【问题描述】:

我正在尝试设置一个简单的 spring cloud consul 应用程序。

我有一个“分发”服务并在 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] 在 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]

我是否缺少任何配置?

感谢您的帮助。

【问题讨论】:

  • 你把 spring.application.name 放在 bootstrap.yml 中了吗?
  • 是的,在“distribution”应用程序中,我设置了 spring.application.name:distribution,在“acquisition”应用程序中,我设置了 spring.application.name:acquisition。我可以看到在 consul 中注册的两个服务
  • 你能分享一个项目吗?
  • github.com/acouette/spring-cloud-distribution.gitgithub.com/acouette/spring-cloud-acquisition.git。请注意,我正在使用“consul agent -dev -bind 127.0.0.1”在一个节点上运行 consul,并且我没有设置服务健康检查,因此服务被标记为关键,但它似乎不会打扰 DiscoveryClient。跨度>
  • 啊,但它确实会影响ConsulPing,它会检查它是否通过了健康检查。添加健康检查,它可能会工作。

标签: java spring-cloud spring-cloud-feign


【解决方案1】:

spencergibb 指出了问题:没有部署健康检查端点。 只需将 spring-boot-actuator 添加到依赖项即可解决问题。

【讨论】:

    【解决方案2】:

    就我而言,我有:spring-boot (2.4.2)spring-cloud 2020.0.1,我刚刚添加了:

    <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-loadbalancer</artifactId>
    </dependency>
    

    【讨论】:

      猜你喜欢
      • 2019-01-26
      • 2016-05-11
      • 2017-01-22
      • 2021-10-22
      • 2020-01-27
      • 2015-05-30
      • 2017-04-08
      • 2016-07-01
      • 2018-04-19
      相关资源
      最近更新 更多