美文网首页
Abp vNext 动态API客户端

Abp vNext 动态API客户端

作者: 王清水 | 来源:发表于2021-11-20 00:22 被阅读0次

    目的:解决客户端因需求的增多和不明确所造成的HhttpClient的复杂性;

    过程:
    1,客户端需要是模块化项目;
    2,客户端系统引用HttpApi.Client;
    3,在客户端中使用属性注入的方式,直接调用abp vNext中的相关服务;

    原理:
    1,abpvNext模块化思想;
    2,HttpApi.Client仅依赖Application.Contracts,它是一个接口,它不能为直接使用;
    3,上述第二点引出了代理类使用拦截,封装使用了HttpClient来进行请求

    详细设置:
    1,在客户端appsettings.json中设置上述拦截器的请求接口
        "RemoteServices": { "YourAbpvNextProjectName:" { "BaseUrl" : "https://localhost:44389/" }}
    2,HttpApi.Client使用Volo.Abp.Http.Client创建代理
        HttpApi.Client项目Modul中,找到ConfigureServices方法,添加如下代码:
            context.Services.AddHttpClientProxies(typeof(YourAbpvNextProjectNameApplicationContractsModul).Assembly, YourAbpvNextProjectName)
    3,拦截器触发创建HttpClient,执行http请求
        ==>>>    按接口创建代理 、把代理类添加到IOC容器
        3.1    通过程序集加载所有的接口;
        3.2    for循环接口集合,使用Volo.Abp.Castle.Core模块创建代理;
        3.3    DynamicHttpProxyInterceptor对象进行请求

    使用polly实现失败重试
    1,在HttpApi.Client项目中引入Nuget包:Microsoft.Extensions.Http.Polly
    2,在HttpApi.Client启动模块中,重写 PreConfigureServices,设置相关信息
        PreConfigure<AbpHttpClientBuilderOptions>(options =>
            {
                options.ProxyClientBuildActions.Add(remoteServiceName, clientBuilder) => {
                    clientBuilder.AddTransientHttpErrorPolicy(policyBuilder =>
                        policyBuilder.WaitAndRetryAsync(
                            3,
                            i => TimeSpan.FromSeconds(Math.Pow(2,i))    //等待两秒中重试,总重试3次
                        )
                    )
                }
            }
        )

    设置重试

    相关文章

      网友评论

          本文标题:Abp vNext 动态API客户端

          本文链接:https://www.haomeiwen.com/subject/cfmetrtx.html