zoukankan      html  css  js  c++  java
  • .NetCore下使用Polly结合IHttpClientFactory实现聚合服务

    在使用微服务的过程中经常会遇到这样的情况,就目前我遇到的问题做下分析

    情况一:

    这里服务对于前后端分离情况来说,多使用查询服务,前端直接获取不同服务的数据展示,如果出现其中的服务失败,对业务数据无影响,只对前端数据展示出现影响

    情况二

    这列聚合服务主要出现在操作上,各个服务存在相互调用,相互协作完成某一项操作的情况

    接下来我在API中添加了聚合服务模块,利用 IHttpClientFactory处理了情况的服务根目录及授权问题

      services.AddHttpContextAccessor();
                services.AddHttpClient("userservicesapi",client=> {
                    client.BaseAddress = new Uri("http://localhost:40001");
                   // client.DefaultRequestHeaders.Add("", "");
                });

    这里可以动态配置管理你的一些注册服务

    在聚合服务中我们根据我们自己业务情况 可以采用 Polly+  消息队列处理

    对于除程序代码外的外部原因造成的异常情况,可以使用Polly 来处理,比如:网络情况 等原因 可以发起重试  服务内部使用消息队列保持操作最终一致

    var client= httpClientFactory.CreateClient("userservicesapi");

    根据配置的名称创建相关的请求,这里涉及到在ServiceA中调用ServiceB的时候,ServiceB需要Accesstoken

    这里需要获取下AccessToken来处理

    public async Task<string> testAddData(School school)
            {
               var client= httpClientFactory.CreateClient("userservicesapi");
                string token = await httpContextAccessor.HttpContext.GetTokenAsync(OpenIdConnectParameterNames.AccessToken);
                client.SetBearerToken(token);
                //访问例子
    
                var res=  await client.PostAsJsonAsync("addData", school);
                res.EnsureSuccessStatusCode();
              return  await res.Content.ReadAsStringAsync();
    
    
            }

    这就OK了,在结合Polly之前封装的处理下,这里接受下返回值

      await _polly.PollyResultRetryAsync<Exception, string>(async () => { return await _httpClient.testAddData(new School { }); }, 3);
  • 相关阅读:
    [转]Connecting To SQLite Database Using Node.js
    [转]Ubuntu安装ss客户端
    ubuntu18.04连接pptpd服务器(未成功)
    ubuntu18.04安装DB2 11.1 Express-c
    ubuntu 18.04使用sysbench测试MySQL性能
    ubuntu18.04手动安装二进制MySQL8.0
    ubuntu 18.04下载mysql8.0.13源码并编译安装(暂时没有成功)
    Linux使用sleep进行延迟实验
    『浅入浅出』MySQL 和 InnoDB
    『浅入深出』MySQL 中事务的实现
  • 原文地址:https://www.cnblogs.com/liyouming/p/9870839.html
Copyright © 2011-2022 走看看