internal SagaMaster(FreeSqlCloud <TDBKey> cloud, string tid, string title, SagaOptions options) { if (string.IsNullOrWhiteSpace(tid)) { throw new ArgumentNullException(nameof(tid)); } _cloud = cloud; _tid = tid; _title = title; if (options == null) { options = new SagaOptions(); } _options = new SagaOptions { MaxRetryCount = options.MaxRetryCount, RetryInterval = options.RetryInterval }; }
async static Task Main(string[] args) { using (var fsql = new FreeSqlCloud <DbEnum>("app001")) { fsql.DistributeTrace += log => Console.WriteLine(log.Split('\n')[0].Trim()); fsql.Register(DbEnum.db1, () => new FreeSqlBuilder() .UseConnectionString(DataType.Sqlite, @"Data Source=db1.db") .Build()); fsql.Register(DbEnum.db2, () => new FreeSqlBuilder() .UseConnectionString(DataType.Sqlite, @"Data Source=db2.db") .Build()); fsql.Register(DbEnum.db3, () => new FreeSqlBuilder() .UseConnectionString(DataType.Sqlite, @"Data Source=db3.db") .Build()); //for (var a = 0; a < 1000; a++) //{ //TCC var tid = Guid.NewGuid().ToString(); await fsql .StartTcc(tid, "创建订单") .Then <Tcc1>() .Then <Tcc2>() .Then <Tcc3>() .ExecuteAsync(); tid = Guid.NewGuid().ToString(); await fsql.StartTcc(tid, "支付购买", new TccOptions { MaxRetryCount = 10, RetryInterval = TimeSpan.FromSeconds(10) }) .Then <Tcc1>(new LocalState { Id = 1, Name = "tcc1" }) .Then <Tcc2>() .Then <Tcc3>(new LocalState { Id = 3, Name = "tcc3" }) .ExecuteAsync(); //Saga tid = Guid.NewGuid().ToString(); await fsql .StartSaga(tid, "注册用户") .Then <Saga1>() .Then <Saga2>() .Then <Saga3>() .ExecuteAsync(); tid = Guid.NewGuid().ToString(); await fsql.StartSaga(tid, "发表评论", new SagaOptions { MaxRetryCount = 5, RetryInterval = TimeSpan.FromSeconds(5) }) .Then <Saga1>(new LocalState { Id = 1, Name = "tcc1" }) .Then <Saga2>() .Then <Saga3>(new LocalState { Id = 3, Name = "tcc3" }) .ExecuteAsync(); Console.ReadKey(); } }