SpringCloud之Feign

Feign简介

主页
Feign简介

导入依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
开启Feign功能
@SpringCloudApplication
@EnableFeignClients
public class TestApplication{
	public static void main(String[]args){
		SpringApplication.run(TestApplication.class,args);
	}
}

feign自动集成了Ribbon负载均衡的RestTemplate,所以不需要在进行注册RestTemplate。

@FeignClient(value="service-provider")
public interface TestClient{
   @GetMapping("user/{id}")
   String queryById(@PathVariable("id")Long id);
}
//于Ribbon写法做对比
@Autowired
RestTemplate rTemplate;
@GetMapping("{id}")
public String queryById(@PathVariable("id") Long id){
 String test= this.restTemplate.getForObject("http://service-provider/user/" + id, String.class);
   return test;
}

  • Feign会通过动态代理生成实现类。
  • @FeignClient 声明是一个客户端。同事通过value制定服务名称
  • Feign会根据注解生成URL,并访问获取结果。

代码展示

@RestController("consumer/user")
public class TestController{
	@Autowired
	private TestClient testClient;
	@RestController()
	 public User queryById(@RequestParam("id") Long id){
        User user = this.userClient.queryById(id);
        return user;
    }
}

Hystrix熔断

Feign已经对Hystrix进行了集成,默认为关闭状态。开启Hystrix代码:

feign:
	hystrix:
		enabled:true #开启熔断

代码

@Controller
public class TestController implement TestClient{
 	@Override
	public String queryById(Long  id){
		return "服务器繁忙
	}
}

@FeignClient(value="service-provider",fallback="TestController .class")
public interface TestClient{
	@GetMapping("user/{id}")
	String queryById(@PathVariable("id")Long id);
}

请求压缩

Feign支持对请求响应进行GZIP压缩,以减少通信过程中的性能损耗。

feign:
	compression:
		request:
			enabled:true #开启请求压缩
			mime-types: text/html,application/xml,application/json # 设置压缩的数据类型
      		min-request-size: 2048 # 设置触发压缩的大小下限
		respones:
			enabled:true # 开启响应压缩

日志级别

通过logging.level.xx=debug来设置日志级别。然而这个对Feign客户端来说是不会产生效果的。因为,@FeignClient注解修改的客户端在被代理时,都创建了新的Feign.Logger实例。我们需要额外指定这个日志的级别才可以。

logging:
	level:
		cn.test:debug
@Configuration
public class FeignLogConfiguration{
	@Bean
	Logger.Level feignLoggerLevel(){
		return Logger.Level.FULL;
	}
}

Logger.Level有4中级别:

  1. NONE:不记录任何日志;默认值
  2. BASIC:仅记录请求的方法,URL以及响应状态码和执行时间。
  3. HEADERS:在BASIC的基础上,额外记录了请求和响应头的信息。
  4. FULL:记录所有请求和响应的明细,包括头信息,请求体,元数据。
@FeignClient(value="service-provider",fallback="TestController .class",configuration=FeignLogConfiguration.class)
public interface TestClient{
	@GetMapping("user/{id}")
	String queryById(@PathVariable("id")Long id);
}
发布了7 篇原创文章 · 获赞 0 · 访问量 53
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览