我开发了诸如仓库管理之类的软件。
我有1个问题。
问题:
我有X条曲目。每个曲目都有不同的能力。
现在我有多个操作员,它们接受订单并填写曲目。 当操作员单击“接受”时-如果订单被接受到选定的轨道,则操作员同步必须获得响应。 假设Track A可以容纳100个订单,而currenlt内部可以容纳98个订单。
现在有3个运营商接受此曲目的订单...
我只需要2个订单,对于第3个订单显示消息,例如-抱歉,您的订单不被接受,因为这条轨道上没有空位。
方法1: 只需锁定服务器即可。
代码:
Api控制器:
[Route("api/[controller]")]
[ApiController]
public class TrackController : ControllerBase
{
public async Task<IActionResult> Test()
{
Console.WriteLine("Handle Request ");
bool result = await TrackManager.ReservePlace();
return Ok(result);
}
}
TrackManager:
public static class TrackManager
{
private static SemaphoreSlim _semaphore { get; set; }
public static void Init()
{
_semaphore = new SemaphoreSlim(1);
}
public static async Task<bool> ReservePlace()
{
await _semaphore.WaitAsync();
Console.WriteLine("Order in process...");
await Task.Delay(2500); <<< ==== Just simulate the biggest delay with database
_semaphore.Release();
return true;
}
}
我真的不喜欢这种方法。
第二种方法-在db中进行死锁之类的操作。
约束数据库不是一个好选择-因为跟踪容量不同。
问题:
1)处理并发请求和响应同步的最佳方法是什么?
2)我正在考虑将所有此应用程序转移到无服务器(AWS Lambda)及其云数据库。我可以采用什么解决方案...因为甚至我的锁定解决方案也可以使用Lambda来实现....
谢谢。