接口并发控制,限制重要接口的并发请求


一、根据规则限制接口并发:RequestLimitAttribute

1.1 使用示例:

C# 全选
[HttpPost]
[RequestLimit(EnumLimitType.BusinessCode, "同步任务正在执行中....")]
public async Task<bool> SyncSAPDataAsync(SyncSAPDataReq input)
{
    return await _business.SyncSAPDataAsync(input, HttpContext.RequestAborted);
}

1.2 说明:

作用在控制器Controller

重点:[RequestLimit(EnumLimitType.BusinessCode, "同步任务正在执行中....")]

基础数据同步,需要限制并发,按照账套级别限制接口并发,

不同账套可以同时同步物料,但是同一个账套一次只能发起一次同步,需要等待同步完成后才可以再次同步,避免数据混乱

EnumLimitType参数有:

参数名说明
User
按用户控制并发
限制同一个用户同时只能一次该接口的请求
BusinessCode
按账套控制并发
限制同一账套同时只能一次该接口的请求
Global
系统全局并发控制
限制整个系统同时只能一次该接口的请求

1.3 缓存检索关键词:limit-

二、限制数据的并发处理,根据接口参数控制并发:ProcessWithLockAttribute

2.1 使用示例:

C# 全选
/// <summary>
/// 同步采购单到SAP
/// </summary>
/// <param name="id"></param>
/// <param name="cancellationToken"></param>
/// <returns>-1失败 1 成功 2跳过</returns>
/// <exception cref="RequestErrorException"></exception>
[ProcessWithLockAttribute<ProcessWithLockKeySyncSap>("sapsync:purchaseorder", "前一次同步还未完成")]
public async Task<res_params_syncSAP> SyncToSAP(req_params_syncSAP input, CancellationToken cancellationToken)
{
  ...
}

2.2 说明

作用在业务Business

重点: [ProcessWithLockAttribute<ProcessWithLockKeySyncSap>("sapsync:purchaseorder", "前一次同步还未完成")]

业务单据同步,避免重复同步的情况

泛型类

泛型参数ProcessWithLockKeySyncSap:业务数据并发锁键值的解析,继承接口:IProcessWithLockKey

C# 全选
public class ProcessWithLockKeySyncSap : IProcessWithLockKey
{
    public string GetLockDataKey(object[] arguments)
    {
        var input = arguments[0] as req_params_syncSAP;
        if (input == null)
            throw new RequestErrorException("无法解析参数:req_params_syncSAP");
        return input.RowId;
    }
}

参数:"sapsync:purchaseorder"

业务类型,区分不同业务,主要防止Key重复用的。还有就是为了更方便的检索出当前系统正在进行的任务

接口并发控制,限制重要接口的并发请求

 

2.3 缓存检索关键词,由用户指定:sapsync

 

 

 

 

 

 

 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
张国生
评论列表

发表评论

评论内容
昵称:
关联文章

接口并发控制限制重要接口并发请求
框架ajax接口请求超时事件设置
同时多个请求_axios多并发请求
解决new Thread().Start导致高并发CPU 100%问题
使用.NET 6开发TodoList应用(11)——使用FluentValidation和MediatR实现接口请求验证
Python windows服务报错: 1053:服务没有及时响应启动或控制请求
EF并发处理,防止并发修改数据
远程控制软件
钉钉对接中消息频率限制
Http请求中Referer设置,CEFSharp带Referer请求
确保 .NET Core BackgroundService 初始化完成后再处理接口请求
使用.NET 6开发TodoList应用(10)——实现DELETE请求以及HTTP请求幂等性
YESWEB接口日志记录
支付系统中要避免支付状态并发BUG
服务器安全:限制外网访问解决方案
C#利用CefSharpChromiumWebBrowser发起Post请求
使用Postman调试接口
C#中反射:获取类直接实现接口并排除继承上级接口
浏览器限制最小字体为12号解决办法
iNeuOS工业互联网操作系统,分布式云端控制安全策略和增加实时日志功能