使用 Singleton 处理订单?
Process Orders using Singleton?
我有一个 table 的订单将由不同的服务处理。因此,假设一个服务开始处理一批订单,并且在它完成之前另一个服务来并开始处理同一批,因为第一批尚未完成并且订单 table 没有更新以反映这一点。
我们如何确保这种情况不会发生?因此,如果一个服务正在处理这个批次,那么另一个服务应该是 "locked"。
最好的方法是什么?
谢谢。
编辑:基本上我正在寻找这样的东西
public void ProcessOrders(){
synchronized (this) {
if(IS_Process_RUNNING){
logger.error("ProcessOrders() is already running.");
return;
}
IS_Process_RUNNING = TRUE;
}
try{
DoSomeWork();
}
catch(Exception e){
LogFatalError.logFatalError("Error processing orders.....", e);
}
finally{
IS_Process_RUNNING = FALSE;
}
}
因此,如果一个进程(第一个)调用此方法,则 is_process_running 标志将设置为 false,并且它会执行它应该执行的操作。并且还将标志设置为 true,以便差异进程到达这里时将立即退出。
private static readonly Object obj = new Object();
lock (obj) { ..... }
这行得通!谢谢
我有一个 table 的订单将由不同的服务处理。因此,假设一个服务开始处理一批订单,并且在它完成之前另一个服务来并开始处理同一批,因为第一批尚未完成并且订单 table 没有更新以反映这一点。
我们如何确保这种情况不会发生?因此,如果一个服务正在处理这个批次,那么另一个服务应该是 "locked"。
最好的方法是什么?
谢谢。
编辑:基本上我正在寻找这样的东西
public void ProcessOrders(){
synchronized (this) {
if(IS_Process_RUNNING){
logger.error("ProcessOrders() is already running.");
return;
}
IS_Process_RUNNING = TRUE;
}
try{
DoSomeWork();
}
catch(Exception e){
LogFatalError.logFatalError("Error processing orders.....", e);
}
finally{
IS_Process_RUNNING = FALSE;
}
}
因此,如果一个进程(第一个)调用此方法,则 is_process_running 标志将设置为 false,并且它会执行它应该执行的操作。并且还将标志设置为 true,以便差异进程到达这里时将立即退出。
private static readonly Object obj = new Object();
lock (obj) { ..... }
这行得通!谢谢