接口并发控制,限制重要接口的并发请求
一、根据规则限制接口并发: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开发框架网发布内容,转载请附上原文出处连接
YESWEB 张国生