Пример #1
0
 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
     };
 }
Пример #2
0
        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();
            }
        }