Feign入門代碼

Feign入門代碼

1、添加依賴

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

2、編寫接口

@FeignClient("user-service")
public interface UserInfoFeignClient {
    @GetMapping("findById/{id}")
    Map<String, String> findById(@PathVariable("id") int id) ;
}

3、啓動類

@EnableFeignClients
//整合註解
@SpringCloudApplication
public class UserConsumerApplication {

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

在該類中去除了RestTemplate。Feign中已經自動集成了Ribbon負載均衡,因此我們不需要自己定義RestTemplate了。
4、控制層

@Controller
public class UserController {

    @Autowired
    private UserInfoFeignClient userInfoFeignClient ;

    @GetMapping("findById/{id}")
    @ResponseBody
    public Map<String, String> findById(@PathVariable("id") int id) {
        return userInfoFeignClient.findById(id) ;
    }
}

5、負載均衡
Feign中本身已經集成了Ribbon依賴和自動配置
在這裏插入圖片描述
因此我們不需要額外引入依賴,也不需要再註冊RestTemplate對象。
5、Hystix支持
開啓熔斷功能

feign:
  hystrix:
    enabled: true # 開啓Feign的熔斷功能

6、編寫熔斷器

/**
 * 熔斷器
 */
@Repository
public class UserFallBack implements UserInfoFeignClient {
    @Override
    public Map<String, String> findById(int id) {
        Map<String,String> map = new HashMap<>() ;
        map.put("400","熔斷開啓") ;
        return map;
    }
}

7、修改實現類

@FeignClient(value = "user-service",fallback = UserFallBack.class)
public interface UserInfoFeignClient {
    @GetMapping("findById/{id}")
    Map<String, String> findById(@PathVariable("id") int id) ;
}

8、修改控制層

@GetMapping("/{userId}")
    public UserInfo findById(@PathVariable("userId") int userId) {
        return userInfoFeignClient.findById(userId) ;
}

當使用Feign的時候,不能夠再加入來自於Spring自帶的包下面的@HystrixCommand註解,會產生衝突。

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