如何用.NetCore后台作业改写生产者消费者模型,实现长尾词处理请求响应?

2026-04-18 01:292阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计673个文字,预计阅读时间需要3分钟。

如何用.NetCore后台作业改写生产者消费者模型,实现长尾词处理请求响应?

环境:Core:3.1的项目说明:该方案适用于个人测试项目,由于重启时队列中的部分数据可能会丢失,对数据有持续化存储需求的项目不适用,无法直接照搬至Linux+Docker环境。

环境:Core:3.1的项目

说明:由于该方案为个人测试项目,重启时队列中的部分数据很可能会丢失,

对数据有要求的该方案不适用,不能照搬需要持久化处理,

另外发布到Linux Docker中通常不会自动回收,但是发布到IIS中需要简单设置不回收即可!!! 如下截图:

在IIS中找到这个站点所用的程序池,点击 高级设置。。。

回收——固定时间间隔 修改为 0

回收——虚拟/专用内存限制 修改为 0

进程模型——闲置超时 修改为 0

1:先来看效果

如何用.NetCore后台作业改写生产者消费者模型,实现长尾词处理请求响应?

1.1:操作日志数据到表

1.2:操作日志数据到文件

2:过滤器

using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc.Filters; using System.Text; using System.Diagnostics; using QzjcService.Models.Dto.LogModels; using QzjcService.Controllers; using SqlSugar.IOC; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using QzjcService.Helper; using Microsoft.AspNetCore.Mvc; using QzjcService.Models; namespace QzjcService.Filters { public class ActionNewLogFilter : ActionFilterAttribute { private static Stopwatch _watting = new Stopwatch(); public static double? longtime = 0; private ActionLogModel log = new ActionLogModel(); private readonly ILogger<ActionNewLogFilter> _logger; public ActionNewLogFilter(ILogger<ActionNewLogFilter> logger) { _logger = logger; } public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { _watting.Start(); string controllerName = context.ActionDescriptor.RouteValues["controller"]; string actionName = context.ActionDescriptor.RouteValues["action"]; string method = context.HttpContext.Request.Method;//请求方式 string queryString = context.HttpContext.Request.QueryString.Value;//地址参数 string argments = JsonConvert.SerializeObject(context.ActionArguments); string url = context.HttpContext.Request.Host + context.HttpContext.Request.Path;//接口地址 var logStr = string.Format("\r\n:{0} \r\n:{1} \r\n:{2} \r\n:{3}", new object[] { url, method, queryString, argments }); log.ControllerName = controllerName; log.ActionName = actionName; //请求方式 0:get, 1:Post log.Menthod = (method.Equals("get", StringComparison.InvariantCultureIgnoreCase) || method.Equals("*:4444"); webBuilder.UseStartup<Startup>(); }) .UseSerilog(); } }
<PackageReference Include="Serilog.Extensions.Hosting" Version="3.1.0" />
<PackageReference Include="Serilog.Sinks.Async" Version="1.4.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
<PackageReference Include="Serilog.Sinks.Elasticsearch" Version="8.2.0" />
<PackageReference Include="Serilog.Sinks.File" Version="4.1.0" />

如有疑问或者错误的地方,请跟帖,本人会第一时间答复以及相互学习,谢谢!个人会不断的上传自己的学习心得!

好了今天就先到这里,下次有时间再更新,如果存在不合理的地方,欢迎大家多多指教留言!!!

我的自由互联地址:www.cnblogs.com/Fengge518

本文共计673个文字,预计阅读时间需要3分钟。

如何用.NetCore后台作业改写生产者消费者模型,实现长尾词处理请求响应?

环境:Core:3.1的项目说明:该方案适用于个人测试项目,由于重启时队列中的部分数据可能会丢失,对数据有持续化存储需求的项目不适用,无法直接照搬至Linux+Docker环境。

环境:Core:3.1的项目

说明:由于该方案为个人测试项目,重启时队列中的部分数据很可能会丢失,

对数据有要求的该方案不适用,不能照搬需要持久化处理,

另外发布到Linux Docker中通常不会自动回收,但是发布到IIS中需要简单设置不回收即可!!! 如下截图:

在IIS中找到这个站点所用的程序池,点击 高级设置。。。

回收——固定时间间隔 修改为 0

回收——虚拟/专用内存限制 修改为 0

进程模型——闲置超时 修改为 0

1:先来看效果

如何用.NetCore后台作业改写生产者消费者模型,实现长尾词处理请求响应?

1.1:操作日志数据到表

1.2:操作日志数据到文件

2:过滤器

using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc.Filters; using System.Text; using System.Diagnostics; using QzjcService.Models.Dto.LogModels; using QzjcService.Controllers; using SqlSugar.IOC; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using QzjcService.Helper; using Microsoft.AspNetCore.Mvc; using QzjcService.Models; namespace QzjcService.Filters { public class ActionNewLogFilter : ActionFilterAttribute { private static Stopwatch _watting = new Stopwatch(); public static double? longtime = 0; private ActionLogModel log = new ActionLogModel(); private readonly ILogger<ActionNewLogFilter> _logger; public ActionNewLogFilter(ILogger<ActionNewLogFilter> logger) { _logger = logger; } public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { _watting.Start(); string controllerName = context.ActionDescriptor.RouteValues["controller"]; string actionName = context.ActionDescriptor.RouteValues["action"]; string method = context.HttpContext.Request.Method;//请求方式 string queryString = context.HttpContext.Request.QueryString.Value;//地址参数 string argments = JsonConvert.SerializeObject(context.ActionArguments); string url = context.HttpContext.Request.Host + context.HttpContext.Request.Path;//接口地址 var logStr = string.Format("\r\n:{0} \r\n:{1} \r\n:{2} \r\n:{3}", new object[] { url, method, queryString, argments }); log.ControllerName = controllerName; log.ActionName = actionName; //请求方式 0:get, 1:Post log.Menthod = (method.Equals("get", StringComparison.InvariantCultureIgnoreCase) || method.Equals("*:4444"); webBuilder.UseStartup<Startup>(); }) .UseSerilog(); } }
<PackageReference Include="Serilog.Extensions.Hosting" Version="3.1.0" />
<PackageReference Include="Serilog.Sinks.Async" Version="1.4.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
<PackageReference Include="Serilog.Sinks.Elasticsearch" Version="8.2.0" />
<PackageReference Include="Serilog.Sinks.File" Version="4.1.0" />

如有疑问或者错误的地方,请跟帖,本人会第一时间答复以及相互学习,谢谢!个人会不断的上传自己的学习心得!

好了今天就先到这里,下次有时间再更新,如果存在不合理的地方,欢迎大家多多指教留言!!!

我的自由互联地址:www.cnblogs.com/Fengge518