当前位置: 首页 > news >正文

江西中企动力做的网站手机软件卸载了怎么恢复

江西中企动力做的网站,手机软件卸载了怎么恢复,网站建设的税率是多少钱,竞价排名点击器前言.NetCore2.1新推出HttpClientFactory工厂类#xff0c; 替代了早期的HttpClient#xff0c;并新增了弹性Http调用机制 (集成Policy组件)。替换的初衷还是简单说下#xff1a;① using(var client new HttpClient()) 调用Dispose()方法#xff0c;并不会很快释放底层So… 前言  .NetCore2.1新推出HttpClientFactory工厂类 替代了早期的HttpClient并新增了弹性Http调用机制 (集成Policy组件)。替换的初衷还是简单说下①  using(var client new HttpClient()) 调用Dispose()方法并不会很快释放底层Socket连接同时新建Socket需要时间这在高并发场景下Socket耗尽。 传送门②  由于①很多人会想到用单例或静态类构建HttpClient实例但是这里还有一个坑HttpClient会忽略DNS的变化。 传送门HttpClientFactory 以一种模块化、可命名、弹性可预期的方式重建了HttpClient的使用方式。HttpClientFactory以依赖注入的方式集成到.NETCore 框架 HttpClientFactory典型用法使用时从IHttpClientFactory工厂创建所需HttpClient实例发起业务端请求。观察Info级别日志19/12/04 11:06:46 [Info].[System.Net.Http.HttpClient.bce-request.LogicalHandler].[18}].[]Start processing HTTP request GET http://localhost:5000/v1/eqid/b827a9400004132a000000065dc26470 19/12/04 11:06:46 [Info].[System.Net.Http.HttpClient.bce-request.ClientHandler].[18}].[]Sending HTTP request GET http://localhost:5000/v1/eqid/b827a9400004132a000000065dc26470 19/12/04 11:06:46 [Info].[System.Net.Http.HttpClient.bce-request.ClientHandler].[34}].[]Received HTTP response after 174.5088ms - OK 19/12/04 11:06:46 [Info].[System.Net.Http.HttpClient.bce-request.LogicalHandler].[34}].[]End processing HTTP request after 211.1478ms - OK一切都是那么自然、优雅。头脑风暴  观察上面单次请求的日志由外层LogicHandler和内层ClientHandler 日志头组成。这样的日志可以想象到有2个问题① 在高并发使用HttpClient日志条数众多没有类似TraceId 这样的机制定位 某次HttpClient调用的完整日志。  ②  若是微服务/ 分布式调用可能还有 将本次HttpClient调用日志与后置api日志 结合分析的需求 这个日志也支持不了。因此本文打算重新构建 HttpClientFactory日志给某次请求的全部日志设置TraceId结合我给出的典型用法来看IHttpClientFactory组件原理示例中System.Net.Http.HttpClient.bce-request.LogicalHandlerSystem.Net.Http.HttpClient.bce-request.ClientHandler 日志头即是来自LoggingScopeHttpMessageHandler LoggingHttpMessageHandler 两个处理器。给出手绘的UML类图  本次要扩展的入口便是IHttpMessageHandlerFilter接口核心是自定义DelegatingHandler日志处理器。编程实践   如以上分析使用aspNetCore2.2需要做如下扩展P1实现IHttpMessageHandlerFilter接口移除接口中默认的2个日志处理器public class TraceIdLoggingMessageHandlerFilter : IHttpMessageHandlerBuilderFilter { private readonly ILoggerFactory _loggerFactory; public TraceIdLoggingMessageHandlerFilter(ILoggerFactory loggerFactory) { _loggerFactory loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory)); } public ActionHttpMessageHandlerBuilder Configure(ActionHttpMessageHandlerBuilder next) { if (next null) { throw new ArgumentNullException(nameof(next)); } return (builder) { // Run other configuration first, we want to decorate. next(builder); var outerLogger _loggerFactory.CreateLogger($System.Net.Http.HttpClient.{builder.Name}.LogicalHandler); builder.AdditionalHandlers.Clear(); builder.AdditionalHandlers.Insert(0,new CustomLoggingScopeHttpMessageHandler(outerLogger)); }; } }P2 实现带有TraceId能力的HttpClient 日志处理器并加入到IHttpMessageHandlerFilter接口实现类public class CustomLoggingScopeHttpMessageHandler : DelegatingHandler { private readonly ILogger _logger; public CustomLoggingScopeHttpMessageHandler(ILogger logger) { _logger logger ?? throw new ArgumentNullException(nameof(logger)); } protected override async TaskHttpResponseMessage SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { if (request null) { throw new ArgumentNullException(nameof(request)); } using (Log.BeginRequestPipelineScope(_logger, request)) { Log.RequestPipelineStart(_logger, request); var response await base.SendAsync(request, cancellationToken); Log.RequestPipelineEnd(_logger, response); return response; } } private static class Log { private static class EventIds { public static readonly EventId PipelineStart new EventId(100, RequestPipelineStart); public static readonly EventId PipelineEnd new EventId(101, RequestPipelineEnd); } private static readonly FuncILogger, HttpMethod, Uri, string, IDisposable _beginRequestPipelineScope LoggerMessage.DefineScopeHttpMethod, Uri, string( HTTP {HttpMethod} {Uri} {CorrelationId}); private static readonly ActionILogger, HttpMethod, Uri, string, Exception _requestPipelineStart LoggerMessage.DefineHttpMethod, Uri, string( LogLevel.Information, EventIds.PipelineStart, Start processing HTTP request {HttpMethod} {Uri} [Correlation: {CorrelationId}]); private static readonly ActionILogger, HttpStatusCode,string,Exception _requestPipelineEnd LoggerMessage.DefineHttpStatusCode,string( LogLevel.Information, EventIds.PipelineEnd, End processing HTTP request - {StatusCode}, [Correlation: {CorrelationId}]); public static IDisposable BeginRequestPipelineScope(ILogger logger, HttpRequestMessage request) { var correlationId GetCorrelationIdFromRequest(request); return _beginRequestPipelineScope(logger, request.Method, request.RequestUri, correlationId); } public static void RequestPipelineStart(ILogger logger, HttpRequestMessage request) { var correlationId GetCorrelationIdFromRequest(request); _requestPipelineStart(logger, request.Method, request.RequestUri, correlationId, null); } public static void RequestPipelineEnd(ILogger logger, HttpResponseMessage response) { var correlationId GetCorrelationIdFromRequest(response.RequestMessage); _requestPipelineEnd(logger, response.StatusCode, correlationId, null); } private static string GetCorrelationIdFromRequest(HttpRequestMessage request) { string correlationId Guid.NewGuid().ToString(); if (request.Headers.TryGetValues(X-Correlation-ID, out var values)) correlationId values.First(); else request.Headers.Add(X-Correlation-ID,correlationId); return correlationId; } } }   以上TraceId的实现思路参考了我前一篇博文《被忽略的TraceId可以用起来了》的思路为每次HttpClient调用过程设定  全局唯一的GUID标记 后置api服务可酌情修改以上代码处理。》其中写入日志的代码Copy自HttpClientFactory源代码。P3 在DI框架中替换原有的IHttpMessageHandlerFilter实现services.Replace(ServiceDescriptor.SingletonIHttpMessageHandlerBuilderFilter, TraceIdLoggingMessageHandlerFilter());发起两次HttpClient请求 输出的日志如下:19/12/04 12:59:22 [Info].[System.Net.Http.HttpClient.bce-request.LogicalHandler].[17}].[]Start processing HTTP request GET http://localhost:5000/v1/eqid/ad78deef00444ed7000000035de704e8 [Correlation: 03de676d-680e-4a92-aef5-749bcc3ba499]19/12/04 12:59:22 [Info].[System.Net.Http.HttpClient.bce-request.LogicalHandler].[4}].[]End processing HTTP request - OK, [Correlation: 03de676d-680e-4a92-aef5-749bcc3ba499]19/12/04 12:59:48 [Info].[System.Net.Http.HttpClient.bce-request.LogicalHandler].[17}].[]Start processing HTTP request GET http://localhost:5000/v1/eqid/8ea0c3b66b60f0ff100000005de704fb [Correlation: 6f14393a-3a2b-45c4-a9b4-0b4ab874ef1d]19/12/04 12:59:48 [Info].[System.Net.Http.HttpClient.bce-request.LogicalHandler].[42}].[]End processing HTTP request - OK, [Correlation: 6f14393a-3a2b-45c4-a9b4-0b4ab874ef1d]可以看到每次请求的开始和结束都带上了设定的GUID TraceId。Tip ① 这个TraceId 可以使用你业务上独具一格的标记这样在排查时 能根据上游业务更好的追踪日志。 ② 目前这个TraceId位于LogMessage实际上可以为nlog自定义LogoutRenderer将该TraceId放在显著位置便于ETL等日志集成框架过滤。Thats All 这是本次解决HttpClient日志无法追踪的思路和方案思考实践UML制图希望能给大家一些启发。 https://github.com/aspnet/HttpClientFactory/blob/master/src/Microsoft.Extensions.Http/Logging/LoggingHttpMessageHandlerBuilderFilter.cs扫一扫左边二维码更多惊喜干货等着你。............
http://www.zqtcl.cn/news/131325/

相关文章:

  • 怎么自己做网站加盟网站建设意义模板
  • 网站开发怎样实现上传视频教程内容导购网站模板
  • 济南做网站建设的公司广告公司资质
  • 域名分类网站微擎 wordpress
  • 公司产品营销策划安徽seo
  • 网站 平均加载时间百度搜索竞价推广
  • 赛车网站开发淄博网站建设及托管
  • 过时的网站湖州公司网站建设
  • 环球设计网站网站建设的面试要求
  • 百度公司网站排名怎么做潮阳网站开发
  • 杨和网站建设国内外建筑设计网站
  • 北京知名网站建设公司wordpress4.0.x 下载
  • 锡盟网站建设做网站视频存储
  • 深圳博纳网站建设高端品牌护肤品排行榜
  • 百度爱采购优化排名软件宁波seo搜索平台推广专业
  • 门户网站的建设公司台山网站定制
  • 建设公司网站需要什么群辉nas怎么做网站
  • 广西自治区集约化网站建设要求坂田网站的建设
  • 网站后台不能编辑企业如何申请网站
  • 网站建设网站设计多少钱网站系统开发方式
  • 站长收录wordpress配置好后别人无法访问
  • 我国档案网站建设吉林网站建设制作
  • 手机网站底部导航网站视频链接怎么做
  • 企业门户网站属于什么层seo关键词排行优化教程
  • wordpress 演示站广东省南粤交通投资建设有限公司网站
  • 典型的企业网站张家港保税区建设规划局网站
  • 网站设计公司那个好网页设计登录界面模板
  • 做网站的厂家聚美优品网站设计
  • 哈尔滨网站建设效果好网站改版 影响google 404跳首页
  • 廊坊网站推广的公司如何做1个手机网站