SpringCloud整合OpenFeign+Eureka

本文源码:https://github.com/chengmingchao/openfegin-eureka-demo
项目架构目录:
SpringCloud整合OpenFeign+Eureka_第1张图片
SpringCloud整合Eureka集群请参考:Springcloud整合Eureka入口

1.增加提供者服务提供的接口与实现

在provider-9001,以获取端口号为例,增加service层(provider-9002类似)

public interface ProviderService {
    String getPort();
}
@Service
public class ProviderServiceImpl implements ProviderService {

    @Value("${server.port}")
    private String port;

    @Override
    public String getPort() {
        return port;
    }
}

增加controller层

@RestController
public class ProviderController {
    @Autowired
    private ProviderServiceImpl providerService;

    @GetMapping("getPort")
    public String getPort(){
        return providerService.getPort();
    }
}

2.消费方,增加Feign调用接口

@Component
@FeignClient(value = "PROVIDER-CLIENT")
public interface FeignService {

    @GetMapping("getPort")
    String getPort();
}

值得注意的是:

1.FeignService 接口中必须加@FeignClient注解,value = “PROVIDER-CLIENT”,value的值为提供方的服务名
2.接口的方法与服务提供方的接口名保持一致,@GetMapping(“getPort”)与服务提供方controller层保持一致
SpringCloud整合OpenFeign+Eureka_第2张图片
3.主启动类上加上注解@EnableFeignClients

3.超时控制

默认Feign客户端只等待一秒钟,但是服务端处理超过一秒钟,导致Feign客户端不再等待直接返回报错:
SpringCloud整合OpenFeign+Eureka_第3张图片
为了避免出现这样的问题,需要设置Feign客户端的超时控制,在yml增加如下配置:

ribbon:
  ReadTimeout: 5000     #指的是建立连接后从服务器读取到可用资源所用的时间。
  ConnectTimeout: 5000  #指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间。

4.Feign日志输出

Feign的Level日志级别配置默认是:NONE
日志级别枚举类 Logger.Level

NONE 不输出日志

BASIC 只有请求方法、URL、响应状态代码、执行时间

HEADERS 基本信息以及请求和响应头

FULL 请求和响应 的heads、body、metadata,建议使用这个级别
日志输出配置,Feign客户端新建配置类


@Configuration
public class MyConfig {

    @Bean
    Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }
}

Feign客户端yml文件增加:

logging:
  level:
    com.cmc.openfeign.service.FeignService: debug

重启项目,访问localhost/get,后台打印了完整的feign的信息
SpringCloud整合OpenFeign+Eureka_第4张图片

你可能感兴趣的:(分布式,java)