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}")]

 

posted @ 2024-02-25 10:27  野码  阅读(150)  评论(0编辑  收藏  举报