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註解,會產生衝突。