SpringCloud 系列实战 | 第五篇: 服务消费者整合(Feign)进行远程调用服务基本用法(SpringBoot)(2.X版本)

it2023-05-05  76

SpringCloud 系列实战 | 第五篇: 服务消费者整合(Feign)进行远程调用服务基本用法(SpringBoot)(2.X版本)

一、Feign简介 Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。

Feign 采用的是基于接口的注解; 1.1 添加pom依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>

1.2 启动类添加注解扫描路径

@EnableFeignClients(basePackages = {"com.customer.feign"})

1.3 创建FeignConfiguration类 打印查看Fegin的请求日志过程信息

package com.customer.configuration; import feign.Logger; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class FeignConfiguration { /** * 日志level有4个级别 * 1.NONE,不记录任何日志 * 2.BASIC,仅记录请求方法、URL以及响应状态码和执行时间: * ---> GET http://PROVIDER-SERVER/getTest HTTP/1.1 * <--- HTTP/1.1 200 (7ms) * 3.HEADRES,除了BASIC以外的还会记录请求和响应的头信息 * 4.FULL,所有 * @return */ @Bean Logger.Level feignLoggerLevel(){ return Logger.Level.BASIC; } }

1.4 Controller编写Feign测试代码

@RestController public class TestController { @Value("${server.port}") private String port; @Autowired private TestFeign testFeign; @GetMapping(value = "getTest") public String getTest(){ String test = testFeign.getTest(); System.out.println("getTest-feign消费者调用提供者返回数据:"+test); return test; }

1.5 创建Feign接口和代码

@FeignClient(value = "PROVIDER-SERVER",configuration = FeignConfiguration.class, fallbackFactory = TestFeignFallback.class) public interface TestFeign { @GetMapping(value = "/getTest") String getTest(); }

1.6 创建FeignFallbackFactory类(Feign调用失败走此类方法)

package com.customer.feign; import feign.hystrix.FallbackFactory; @Component public class TestFeignFallback implements FallbackFactory<TestFeign> { @Override public TestFeign create(Throwable throwable) { return new TestFeign() { @Override public String getTest() { return "调用失败:" + throwable.getMessage(); } }; } }

1.7 配置文件开启Feign日志

#开启Feign日志 logging.level.com.customer.feign.* = DEBUG

1.8 启动Eureka注册中心服务 8900、PROVIDER-SERVER提供者服务 8901、CUSTOMER-SERVER消费者服务 8902 访问Eureka注册中心服务地址:http://localhost:8900

1.9 浏览器访问消费者服务接口 http://localhost:8902/getTest 查看浏览器返回结果 和 控制台信息 浏览器和控制台均显示返回成功,Feign调用远程服务成功。

二、Feign的4种日志级别格式 进行逐一测试

@Configuration public class FeignConfiguration { /** * 日志level有4个级别 * 1.NONE,不记录任何日志 * 2.BASIC,仅记录请求方法、URL以及响应状态码和执行时间: * 3.HEADRES,除了BASIC以外的还会记录请求和响应的头信息 * 4.FULL,所有 */ @Bean Logger.Level feignLoggerLevel(){ return Logger.Level.BASIC; } }

2.1 第一种 NONE 不记录任何日志 2.2 第二种 BASIC 仅记录请求方法、URL以及响应状态码和执行时间 2.3 第三种 HEADRES,除了BASIC以外的还会记录请求和响应的头信息 2.4 第四种 FULL 所有 2.5 此时服务消费者整合(Feign)进行远程调用服务就完成了。

最新回复(0)