什么是Feign?
- Feign可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样。你不用再自己拼接url,拼接参数等等操作,一切都交给Feign去做。
1.首先在服务调用方引入Feign的pom文件依赖:
<!-- feign依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.在服务调用方的启动引导类上使用注解启用Feign:
@EnableFeignClients //启用feign组件
3.新建一个UserClient接口:
package com.itwei.service.client;
import com.itwei.service.pojo.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@FeignClient("service-provider") //声明一个接口是feign接口,指定服务id
@Component
public interface UserClient {
@GetMapping("user/{id}")
public User queryUserById(@PathVariable("id")Long id);
}
4.改造UserController:
- 注入Feign接口。
- 更改返回的内容。
@Autowired
private UserClient userClient;
@GetMapping
@ResponseBody
@HystrixCommand
public String queryUserById(@RequestParam("id") Long id) {
return this.userClient.queryUserById(id).toString();
}
5.测试成功:
6.Feign虽然内置了熔断组件,但是默认是关闭的,需要我们手动去配置application.yml开启:
feign:
hystrix:
enabled: true #开启Feign的熔断功能
7.只需要创建实现类,实现哪个方法就是熔断哪个方法:
package com.itwei.service.client;
import com.itwei.service.pojo.User;
@Component //注入到spring容器
public class UserClientFallback implements UserClient{
@Override
public User queryUserById(Long id) {
User user = new User();
user.setUsername("(feign)服务器错误,请返回重试!");
return user;
}
}
8.需要改造feign的接口UserClient:
- 添加fallback的值,值的内容为配置熔断器的实现类UserClientFallback.class
@FeignClient(value = "service-provider",fallback = UserClientFallback.class)
9.记得去掉@Hystrix注解,已经不需要了,因为feign自带。
10.运行代码:
这样就能让我们代码写的更优雅啦!!!