Feign

Feign

是Netflix開發的聲明式、模板化的HTTP客戶端, Feign可以幫助我們更快捷、優雅地調用HTTP API。

在Spring Cloud中,使用Feign非常簡單——創建一個接口,並在接口上添加一些註解,代碼就完成了。Feign支持多種註解,例如Feign自帶的註解或者JAX-RS註解等。

Spring Cloud對Feign進行了增強,使Feign支持了Spring MVC註解,並整合了Ribbon和Eureka,從而讓Feign的使用更加方便。

Spring Cloud Feign是基於Netflix feign實現,整合了Spring Cloud Ribbon和Spring Cloud Hystrix,除了提供這兩者的強大功能外,還提供了一種聲明式的Web服務客戶端定義的方式。

Spring Cloud Feign幫助我們定義和實現依賴服務接口的定義。在Spring Cloud feign的實現下,只需要創建一個接口並用註解方式配置它,即可完成服務提供方的接口綁定,簡化了在使用Spring Cloud Ribbon時自行封裝服務調用客戶端的開發量。

 

1)引入Feign的依賴

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

2)給主函數加註解

@EnableFeignClients
@SpringCloudApplication
public class ConsumerApplication {
   // @Bean
   //  @LoadBalanced //底層用了攔截器,攔截restTemplate 的http請求,使用負載均衡算法處理請求
   //  public RestTemplate restTemplate() {
   //     return new RestTemplate();
   //}

    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class);
    }

3)編寫一個接口,利用SpringMVC的方式,告訴Feign請求的方式,參數,返回值,方法名。

@FeignClient("user-service")
public interface UserClient {
    @GetMapping("user/{id}")
    User queryById(@PathVariable("id") Integer id);
}

4)Controller類

  @Autowired
  private UserClient userClient;
  @GetMapping("{id}")
  public User queryById(@PathVariable("id")Integer id){
 //     String url="http://user-service/user/"+id;
 //     String user=restTemplate.getForObject(url,String.class);
      return userClient.queryById(id);

OK!

 

 

ⅡFeign中使用熔斷

Feign對Hystix支持。

1)開啓熔斷

feign: #hystrix在feign裏默認是關閉的,需要開啓feign的熔斷
  hystrix:
    enabled: true

2)定義一個類實現client接口

public class UserClientFallback implements UserClient {//熔斷接口實現類
    @Override
    public User queryById(Integer id) {
        User user = new User();
        user.setUsername("未知");
        return user;
    }
}
在接口中,指定實現類
@FeignClient(value = "user-service",fallback = UserClientFallback.class)
public interface UserClient {
    @GetMapping("user/{id}")
    User queryById(@PathVariable("id") Integer id);
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章