10.Feign组件在NET中的简单使用
安装包:SummerBoot
Feign 是一种声明式服务调用组件 , 我们只需要声明一个接口并通过注解进行简单的配置(类似于Dao 接口上面的 Mapper 注解一样)即可实现对 HTTP 接口的绑定。 通过 Feign,我们可以像调用本地方法一样来调用远程服务,而完全感觉不到这是在进行远程调用。
Feign底层基于httpClient.
其它作用:
1.自定义拦截器(AOP)
2.封装了Http远程调用过程
3.微服务接入Nacos
4.可结合Polly做降级处理
5.结合JWT做授权与鉴权
方式
|
特性
|
HttpGet
|
[GetMapping]
|
HttpPut
|
[PutMapping]
|
HttpDelete
|
[DeleteMapping]
|
HttpPost
|
[PostMapping]
|
Feign组件的简单使用:
创建三个项目NacosService(http://192.168.10.13:5152),Summerboot.Feign,Summerboot.Client(http://192.168.10.13:5197)
NacosService项目提供对外接口
ApiController] [Route("[controller]/[action]")] public class UserController:ControllerBase { [HttpGet] public List<UserInfo> GetUsers() { List<UserInfo> result = new() { new(){Id = 1,NickName = "张三"}, new(){Id = 2,NickName = "李四"} }; return result; }
[HttpPost]
public UserInfo PostUsers([Body]UserInfo User)
{
return User;
}
}
Summerboot.Feign项目
注册服务
builder.Services.AddSummerBoot();
builder.Services.AddSummerBootFeign();
里面添加一个接口
[FeignClient(Url="http://192.168.10.13:5152")] public interface INacosMicroService { [GetMapping("/user/GetUsers")] Task<List<UserInfo>> GetUsers(); [PostMapping("/user/PostUser")] Task<UserInfo> PostUser([Body]UserInfo user) }
Feign 组件会由 FeignProxyBuilder 类自动为接口生成实现代理类,注意,此版本中接口必须定义为Task<> 异步方法。
[FeignClient(Url = "http://localhost:5001/home", IsIgnoreHttpsCertificateValidate = true, InterceptorType = typeof(MyRequestInterceptor),Timeout = 100)]
定义一个接口,并且在接口上添加FeignClient注解,FeignClient注解里可以自定义http接口url的公共部分-url(整个接口请求的url由FeignClient里的url加上方法里的path组成),是否忽略远程接口的https证书校验-IsIgnoreHttpsCertificateValidate,接口超时时间-Timeout(单位s),自定义拦截器-InterceptorType。
[Body] 请求体中支持Json与Form两种格式,默认为Json, 如果需要设置为Form提交
Summerboot.Client项目
添加服务
builder.Services.AddSummerBoot();
builder.Services.AddSummerBootFeign();
[ApiController] [Route("[controller]/[action]")] public class MicroFeignClientController { private readonly INacosMicroService _nacosMicroService;
public MicroFeignClientController(INacosMicroService nacosMicroService) { _nacosMicroService = nacosMicroService; } [HttpGet] public async Task<List<UserInfo>> GetUsers() { return await _nacosMicroService.GetUsers(); }
[HttpPost]
public async Task<UserInfo> PostUser(UserInfo User)
{
return await_nacosMicroService.PostUsers(User);
}
}
同时,url和path可以通过读取配置获取,配置项通过${}包裹,配置的json如下:
{ "configurationTest": { "url": "http://localhost:5001/home", "path": "/query" } }
[FeignClient(Url = "${configurationTest:url}")]