Spring cloud微服务体系必不可少的Feign (Read timed out)

Posted BBinChina

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring cloud微服务体系必不可少的Feign (Read timed out)相关的知识,希望对你有一定的参考价值。

Feign介绍

Feign是一款Java语言编写的HttpClient绑定器,在Spring Cloud微服务中用于实现微服务之间的声明式调用。Feign 可以定义请求到其他服务的接口,用于微服务间的调用,不用自己再写http请求,在客户端实现,调用此接口就像远程调用其他服务一样,当请求出错时可以调用接口的实现类来返回

Feign是一个声明式的web service客户端,它使得编写web service客户端更为容易。创建接口,为接口添加注解,即可使用Feign。Feign可以使用Feign注解或者JAX-RS注解,还支持热插拔的编码器和解码器。Spring Cloud为Feign添加了Spring MVC的注解支持,并整合了Ribbon和Eureka来为使用Feign时提供负载均衡。

feign源码的github地址:

https://github.com/OpenFeign/feign

http rpc通讯方式

http json通讯相对于二进制通讯比如(dubbo)框架,有其劣势也有其优势,最大的优势在于异构系统通常都采用http。

如何让java 项目作为一个http client已经调用远程服务呢?

<!--            feign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.2.RELEASE</version>
        </dependency>
<!--            eureka-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <version>2.2.2.RELEASE</version>
        </dependency>

在spring boot应用使用注解

@EnableFeignClients
@EnableEurekaClient

@SpringBootApplication
@EnableFeignClients
@EnableEurekaClient
public class DemoApplication {
    public static void main(String[] args) {

        SpringApplication.run(DemoApplication .class, args);
    }
}

远程服务

@FeignClient(name="notice-server",url="${remote.notice.uri}")
public interface RemoteService {
    @PostMapping(path = "/ApiXXX",produces = HttpConfig.JsonContent)
    Response<String> ApiXXX(@RequestBody To to);
}

eureka配置

eureka:
  instance:
    lease-expiration-duration-in-seconds: 30
    ip-address: 127.0.0.1
    instance-id: ${eureka.instance.ip-address}:${server.port}
  client:
    service-url:
      defaultZone: http://127.0.0.1:22001/eureka/
    initial-instance-info-replication-interval-seconds: 10
    registry-fetch-interval-seconds: 5
    eureka-server-connect-timeout-seconds: 30

Feign配置


feign:
  client:
    config:
      default:
        connect-timeout: 10000
        read-timeout: 20000

可以看到Feign的默认超时时间为20m,当我们调用远程服务 出现Read Timed Out时,可以根据业务情况调整

以上是关于Spring cloud微服务体系必不可少的Feign (Read timed out)的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud 与微服务学习总结(16)—— 微服务架构统一安全认证设计与实践

Spring Cloud微服务体系的组成

spring cloud 网关服务

Spring Cloud封神之旅-微服务与springcloud

Spring Cloud封神之旅-微服务与springcloud

快看!不可不知的 Spring Cloud 微服务架构实践与经验总结!