Пример #1
0
        static void Main(string[] args)
        {
            InitializeENodeFramework();

            var commandService = ObjectContainer.Resolve <ICommandService>();
            var noteId         = ObjectId.GenerateNewStringId();
            var command1       = new CreateNoteCommand {
                AggregateRootId = noteId, Title = "Sample Title1"
            };
            var command2 = new ChangeNoteTitleCommand {
                AggregateRootId = noteId, Title = "Sample Title2"
            };

            Console.WriteLine(string.Empty);

            commandService.ExecuteAsync(command1, CommandReturnType.EventHandled).Wait();
            commandService.ExecuteAsync(command2, CommandReturnType.EventHandled).Wait();

            Console.WriteLine(string.Empty);

            _logger.Info("Press Enter to exit...");

            Console.ReadLine();
            _configuration.ShutdownEQueue();
        }
Пример #2
0
 public static void Stop()
 {
     try
     {
         _enodeConfiguration.ShutdownEQueue();
     }
     catch (Exception ex)
     {
         _logger.Error("EQueue stop failed.", ex);
         throw;
     }
 }
Пример #3
0
 public bool Stop(HostControl hostControl)
 {
     try
     {
         _enodeConfiguration.ShutdownEQueue();
         return(true);
     }
     catch (Exception ex)
     {
         _logger.Error("EQueue stop failed.", ex);
         return(false);
     }
 }
Пример #4
0
        static void Main(string[] args)
        {
            ConfigSettings.Initialize();
            InitializeENodeFramework();

            var commandService = ObjectContainer.Resolve <ICommandService>();

            var noteId   = ObjectId.GenerateNewStringId();
            var command1 = new CreateNoteCommand {
                AggregateRootId = noteId, Title = "Sample Title1"
            };
            var command2 = new ChangeNoteTitleCommand {
                AggregateRootId = noteId, Title = "Sample Title2"
            };

            Console.WriteLine(string.Empty);

            _logger.Info("Creating Note...");
            commandService.ExecuteAsync(command1, CommandReturnType.EventHandled).Wait();
            _logger.Info("Note create success.");

            Console.WriteLine(string.Empty);

            _logger.Info("Updating Note");
            commandService.ExecuteAsync(command2, CommandReturnType.EventHandled).Wait();
            _logger.Info("Note update success.");

            Console.WriteLine(string.Empty);

            using (var connection = new SqlConnection(ConfigSettings.ConnectionString))
            {
                var note = connection.QueryList(new { Id = noteId }, ConfigSettings.NoteTable).Single();
                _logger.InfoFormat("Note from ReadDB, id: {0}, title: {1}, version: {2}", note.Id, note.Title, note.Version);
            }

            Console.WriteLine(string.Empty);

            _logger.Info("Press Enter to exit...");

            Console.ReadLine();
            _configuration.ShutdownEQueue();
        }
Пример #5
0
 public static void Stop()
 {
     _enodeConfiguration.ShutdownEQueue().Stop();
 }
Пример #6
0
        static void NormalTest()
        {
            var assemblies = new[] { Assembly.GetExecutingAssembly() };

            _configuration = Configuration
                .Create()
                .UseAutofac()
                .RegisterCommonComponents()
                .UseLog4Net()
                .UseJsonNet()
                .CreateENode()
                .RegisterENodeComponents()
                .RegisterAllTypeCodes()
                .RegisterBusinessComponents(assemblies)
                .UseEQueue()
                .InitializeBusinessAssemblies(assemblies)
                .StartEQueue();

            Console.WriteLine(string.Empty);
            Console.WriteLine("ENode started...");

            var commandService = ObjectContainer.Resolve<ICommandService>();
            var syncHelper = ObjectContainer.Resolve<SyncHelper>();
            var account1 = ObjectId.GenerateNewStringId();
            var account2 = ObjectId.GenerateNewStringId();
            var account3 = "INVALID-" + ObjectId.GenerateNewStringId();
            Console.WriteLine(string.Empty);

            //创建两个银行账户
            commandService.ExecuteAsync(new CreateAccountCommand(account1, "雪华"), CommandReturnType.EventHandled).Wait();
            commandService.ExecuteAsync(new CreateAccountCommand(account2, "凯锋"), CommandReturnType.EventHandled).Wait();

            Console.WriteLine(string.Empty);

            //每个账户都存入1000元
            commandService.Send(new StartDepositTransactionCommand(ObjectId.GenerateNewStringId(), account1, 1000));
            syncHelper.WaitOne();
            commandService.Send(new StartDepositTransactionCommand(ObjectId.GenerateNewStringId(), account2, 1000));
            syncHelper.WaitOne();

            Console.WriteLine(string.Empty);

            //账户1向账户3转账300元,交易会失败,因为账户3不存在
            commandService.Send(new StartTransferTransactionCommand(ObjectId.GenerateNewStringId(), new TransferTransactionInfo(account1, account3, 300D)));
            syncHelper.WaitOne();
            Console.WriteLine(string.Empty);

            //账户1向账户2转账1200元,交易会失败,因为余额不足
            commandService.Send(new StartTransferTransactionCommand(ObjectId.GenerateNewStringId(), new TransferTransactionInfo(account1, account2, 1200D)));
            syncHelper.WaitOne();
            Console.WriteLine(string.Empty);

            //账户2向账户1转账500元,交易成功
            commandService.Send(new StartTransferTransactionCommand(ObjectId.GenerateNewStringId(), new TransferTransactionInfo(account2, account1, 500D)));
            syncHelper.WaitOne();

            Thread.Sleep(500);
            Console.WriteLine(string.Empty);
            Console.WriteLine("Press Enter to exit...");
            Console.ReadLine();
            _configuration.ShutdownEQueue();
        }
Пример #7
0
        static void PerformanceTest()
        {
            var assemblies = new[] { Assembly.GetExecutingAssembly() };

            _configuration = Configuration
                .Create()
                .UseAutofac()
                .RegisterCommonComponents()
                .UseLog4Net()
                .UseJsonNet()
                .RegisterUnhandledExceptionHandler()
                .CreateENode()
                .RegisterENodeComponents()
                .RegisterAllTypeCodes()
                .RegisterBusinessComponents(assemblies)
                .UseEQueue()
                .InitializeBusinessAssemblies(assemblies)
                .StartEQueue();

            Console.WriteLine(string.Empty);
            Console.WriteLine("ENode started...");

            var commandService = ObjectContainer.Resolve<ICommandService>();
            var syncHelper = ObjectContainer.Resolve<SyncHelper>();
            var countSyncHelper = ObjectContainer.Resolve<CountSyncHelper>();

            Console.WriteLine(string.Empty);

            var accountList = new List<string>();
            var accountCount = 100;
            var transactionCount = 100;
            var depositAmount = 100000D;
            var transferAmount = 1000D;

            //创建银行账户
            for (var i = 0; i < accountCount; i++)
            {
                var accountId = ObjectId.GenerateNewStringId();
                commandService.ExecuteAsync(new CreateAccountCommand(accountId, "SampleAccount" + i), CommandReturnType.EventHandled).Wait();
                accountList.Add(accountId);
            }

            Console.WriteLine(string.Empty);

            //每个账户都存入初始额度
            foreach (var accountId in accountList)
            {
                commandService.Send(new StartDepositTransactionCommand(ObjectId.GenerateNewStringId(), accountId, depositAmount));
                syncHelper.WaitOne();
            }

            Console.WriteLine(string.Empty);

            countSyncHelper.SetExpectedCount((int)transactionCount);

            var watch = Stopwatch.StartNew();
            for (var i = 0; i < transactionCount; i++)
            {
                var sourceAccountIndex = new Random().Next(accountCount - 1);
                var targetAccountIndex = sourceAccountIndex + 1;
                var sourceAccount = accountList[sourceAccountIndex];
                var targetAccount = accountList[targetAccountIndex];
                commandService.SendAsync(new StartTransferTransactionCommand(ObjectId.GenerateNewStringId(), new TransferTransactionInfo(sourceAccount, targetAccount, transferAmount)));
            }

            countSyncHelper.WaitOne();

            var spentTime = watch.ElapsedMilliseconds;
            Thread.Sleep(500);
            Console.WriteLine(string.Empty);
            Console.WriteLine("All transfer transactions completed, time spent: {0}ms, throughput: {1} transactions per second.", spentTime, transactionCount * 1000 / spentTime);
            Console.WriteLine("Press Enter to exit...");
            Console.ReadLine();
            _configuration.ShutdownEQueue();
        }
Пример #8
0
 private static void CleanupEnode()
 {
     _enodeConfiguration.ShutdownEQueue();
     _enodeConfiguration.Stop();
     _logger.Info("ENode shutdown.");
 }
Пример #9
0
        static void PerformanceTest()
        {
            var assemblies = new[]
            {
                Assembly.GetExecutingAssembly()
            };

            _configuration = Configuration
                             .Create()
                             .UseAutofac()
                             .RegisterCommonComponents()
                             .UseLog4Net()
                             .UseJsonNet()
                             .RegisterUnhandledExceptionHandler()
                             .CreateENode()
                             .RegisterENodeComponents()
                             .RegisterBusinessComponents(assemblies)
                             .UseEQueue()
                             .InitializeBusinessAssemblies(assemblies)
                             .StartEQueue();

            Console.WriteLine(string.Empty);
            Console.WriteLine("ENode started...");

            var commandService  = ObjectContainer.Resolve <ICommandService>();
            var syncHelper      = ObjectContainer.Resolve <SyncHelper>();
            var countSyncHelper = ObjectContainer.Resolve <CountSyncHelper>();

            Console.WriteLine(string.Empty);

            var accountList      = new List <string>();
            var accountCount     = 100;
            var transactionCount = 100;
            var depositAmount    = 100000D;
            var transferAmount   = 1000D;

            //创建银行账户
            for (var i = 0; i < accountCount; i++)
            {
                var accountId = ObjectId.GenerateNewStringId();
                commandService.ExecuteAsync(new CreateAccountCommand(accountId, "SampleAccount" + i), CommandReturnType.EventHandled).Wait();
                accountList.Add(accountId);
            }

            Console.WriteLine(string.Empty);

            //每个账户都存入初始额度
            foreach (var accountId in accountList)
            {
                commandService.Send(new StartDepositTransactionCommand(ObjectId.GenerateNewStringId(), accountId, depositAmount));
                syncHelper.WaitOne();
            }

            Console.WriteLine(string.Empty);

            countSyncHelper.SetExpectedCount((int)transactionCount);

            var watch = Stopwatch.StartNew();

            for (var i = 0; i < transactionCount; i++)
            {
                var sourceAccountIndex = new Random().Next(accountCount - 1);
                var targetAccountIndex = sourceAccountIndex + 1;
                var sourceAccount      = accountList[sourceAccountIndex];
                var targetAccount      = accountList[targetAccountIndex];
                commandService.SendAsync(new StartTransferTransactionCommand(ObjectId.GenerateNewStringId(), new TransferTransactionInfo(sourceAccount, targetAccount, transferAmount)));
            }

            countSyncHelper.WaitOne();

            var spentTime = watch.ElapsedMilliseconds;

            Thread.Sleep(500);
            Console.WriteLine(string.Empty);
            Console.WriteLine("All transfer transactions completed, time spent: {0}ms, throughput: {1} transactions per second.", spentTime, transactionCount * 1000 / spentTime);
            Console.WriteLine("Press Enter to exit...");
            Console.ReadLine();
            _configuration.ShutdownEQueue();
        }
Пример #10
0
        static void NormalTest()
        {
            var assemblies = new[] { Assembly.GetExecutingAssembly() };

            _configuration = Configuration
                             .Create()
                             .UseAutofac()
                             .RegisterCommonComponents()
                             .UseLog4Net()
                             .UseJsonNet()
                             .CreateENode()
                             .RegisterENodeComponents()
                             .RegisterBusinessComponents(assemblies)
                             .UseEQueue()
                             .InitializeBusinessAssemblies(assemblies)
                             .StartEQueue();

            Console.WriteLine(string.Empty);
            Console.WriteLine("ENode started...");

            var commandService = ObjectContainer.Resolve <ICommandService>();
            var syncHelper     = ObjectContainer.Resolve <SyncHelper>();
            var account1       = ObjectId.GenerateNewStringId();
            var account2       = ObjectId.GenerateNewStringId();
            var account3       = "INVALID-" + ObjectId.GenerateNewStringId();

            Console.WriteLine(string.Empty);

            //创建两个银行账户
            commandService.ExecuteAsync(new CreateAccountCommand(account1, "雪华"), CommandReturnType.EventHandled).Wait();
            commandService.ExecuteAsync(new CreateAccountCommand(account2, "凯锋"), CommandReturnType.EventHandled).Wait();

            Console.WriteLine(string.Empty);

            //每个账户都存入1000元
            commandService.Send(new StartDepositTransactionCommand(ObjectId.GenerateNewStringId(), account1, 1000));
            syncHelper.WaitOne();
            commandService.Send(new StartDepositTransactionCommand(ObjectId.GenerateNewStringId(), account2, 1000));
            syncHelper.WaitOne();

            Console.WriteLine(string.Empty);

            //账户1向账户3转账300元,交易会失败,因为账户3不存在
            commandService.Send(new StartTransferTransactionCommand(ObjectId.GenerateNewStringId(), new TransferTransactionInfo(account1, account3, 300D)));
            syncHelper.WaitOne();
            Console.WriteLine(string.Empty);

            //账户1向账户2转账1200元,交易会失败,因为余额不足
            commandService.Send(new StartTransferTransactionCommand(ObjectId.GenerateNewStringId(), new TransferTransactionInfo(account1, account2, 1200D)));
            syncHelper.WaitOne();
            Console.WriteLine(string.Empty);

            //账户2向账户1转账500元,交易成功
            commandService.Send(new StartTransferTransactionCommand(ObjectId.GenerateNewStringId(), new TransferTransactionInfo(account2, account1, 500D)));
            syncHelper.WaitOne();

            Thread.Sleep(200);
            Console.WriteLine(string.Empty);
            Console.WriteLine("Press Enter to exit...");
            Console.ReadLine();
            _configuration.ShutdownEQueue();
        }
Пример #11
0
        static void NormalTest()
        {
            var assemblies    = new[] { Assembly.GetExecutingAssembly() };
            var loggerFactory = new SerilogLoggerFactory()
                                .AddFileLogger("ECommon", Path.Combine("logs", "ecommon"))
                                .AddFileLogger("ENode", Path.Combine("logs", "enode"))
                                .AddFileLogger("EQueue", Path.Combine("logs", "enode"));

            _configuration = ECommon.Configurations.Configuration
                             .Create()
                             .UseAutofac()
                             .RegisterCommonComponents()
                             .UseSerilog(loggerFactory)
                             .UseJsonNet()
                             .CreateENode()
                             .RegisterENodeComponents()
                             .RegisterBusinessComponents(assemblies)
                             .UseEQueue()
                             .BuildContainer()
                             .InitializeBusinessAssemblies(assemblies)
                             .StartEQueue()
                             .Start();

            Console.WriteLine(string.Empty);
            Console.WriteLine("ENode started...");

            var commandService = ObjectContainer.Resolve <ICommandService>();
            var syncHelper     = ObjectContainer.Resolve <SyncHelper>();
            var account1       = ObjectId.GenerateNewStringId();
            var account2       = ObjectId.GenerateNewStringId();
            var account3       = "INVALID-" + ObjectId.GenerateNewStringId();

            Console.WriteLine(string.Empty);

            //创建两个银行账户
            commandService.ExecuteAsync(new CreateAccountCommand(account1, "雪华"), CommandReturnType.EventHandled).Wait();
            commandService.ExecuteAsync(new CreateAccountCommand(account2, "凯锋"), CommandReturnType.EventHandled).Wait();

            Console.WriteLine(string.Empty);

            //每个账户都存入1000元
            commandService.SendAsync(new StartDepositTransactionCommand(ObjectId.GenerateNewStringId(), account1, 1000)).Wait();
            syncHelper.WaitOne();
            commandService.SendAsync(new StartDepositTransactionCommand(ObjectId.GenerateNewStringId(), account2, 1000)).Wait();
            syncHelper.WaitOne();

            Console.WriteLine(string.Empty);

            //账户1向账户3转账300元,交易会失败,因为账户3不存在
            commandService.SendAsync(new StartTransferTransactionCommand(ObjectId.GenerateNewStringId(), new TransferTransactionInfo(account1, account3, 300D))
            {
                Items = new Dictionary <string, string>
                {
                    { "ProcessId", "10000" }
                }
            }).Wait();
            syncHelper.WaitOne();
            Console.WriteLine(string.Empty);

            //账户1向账户2转账1200元,交易会失败,因为余额不足
            commandService.SendAsync(new StartTransferTransactionCommand(ObjectId.GenerateNewStringId(), new TransferTransactionInfo(account1, account2, 1200D))
            {
                Items = new Dictionary <string, string>
                {
                    { "ProcessId", "10001" }
                }
            }).Wait();
            syncHelper.WaitOne();
            Console.WriteLine(string.Empty);

            //账户2向账户1转账500元,交易成功
            commandService.SendAsync(new StartTransferTransactionCommand(ObjectId.GenerateNewStringId(), new TransferTransactionInfo(account2, account1, 500D))
            {
                Items = new Dictionary <string, string>
                {
                    { "ProcessId", "10002" }
                }
            }).Wait();
            syncHelper.WaitOne();

            Thread.Sleep(10000);
            _configuration.ShutdownEQueue().Stop();
            Console.WriteLine("Simple test complete.");
        }
Пример #12
0
        static void NormalTest()
        {
            var assemblies = new[] { Assembly.GetExecutingAssembly() };

            _configuration = Configuration
                             .Create()
                             .UseAutofac()
                             .RegisterCommonComponents()
                             .UseLog4Net()
                             .UseJsonNet()
                             .CreateENode()
                             .RegisterENodeComponents()
                             .RegisterBusinessComponents(assemblies)
                             .UseMySqlLockService(new OptionSetting(
                                                      new KeyValuePair <string, object>("ConnectionString", "Server=192.168.1.103;Database=enode;Uid=root;Pwd=123456"),
                                                      new KeyValuePair <string, object>("TableName", "LockKey")))
                             .UseMySqlCommandStore(new OptionSetting(
                                                       new KeyValuePair <string, object>("ConnectionString", "Server=192.168.1.103;Database=enode;Uid=root;Pwd=123456"),
                                                       new KeyValuePair <string, object>("TableName", "Command")
                                                       //new KeyValuePair<string, object>("PrimaryKeyName", "PRIMARY")
                                                       ))
                             .UseMySqlEventStore(new OptionSetting(
                                                     new KeyValuePair <string, object>("ConnectionString", "Server=192.168.1.103;Database=enode;Uid=root;Pwd=123456"),
                                                     new KeyValuePair <string, object>("TableName", "EventStream"),
                                                     //new KeyValuePair<string, object>("PrimaryKeyName", "PRIMARY"),
                                                     new KeyValuePair <string, object>("CommandIndexName", "IX_EventStream_AggId_CommandId"),
                                                     new KeyValuePair <string, object>("BulkCopyBatchSize", 1000),
                                                     new KeyValuePair <string, object>("BulkCopyTimeout", 60)))
                             .UseEQueue()
                             .InitializeBusinessAssemblies(assemblies)
                             .StartEQueue();

            Console.WriteLine(string.Empty);
            Console.WriteLine("ENode started...");

            var commandService = ObjectContainer.Resolve <ICommandService>();
            var syncHelper     = ObjectContainer.Resolve <SyncHelper>();
            var account1       = ObjectId.GenerateNewStringId();
            var account2       = ObjectId.GenerateNewStringId();
            var account3       = "INVALID-" + ObjectId.GenerateNewStringId();

            Console.WriteLine(string.Empty);

            //创建两个银行账户
            commandService.ExecuteAsync(new CreateAccountCommand(account1, "雪华"), CommandReturnType.EventHandled).Wait();
            commandService.ExecuteAsync(new CreateAccountCommand(account2, "凯锋"), CommandReturnType.EventHandled).Wait();

            Console.WriteLine(string.Empty);

            //每个账户都存入1000元
            commandService.Send(new StartDepositTransactionCommand(ObjectId.GenerateNewStringId(), account1, 1000));
            syncHelper.WaitOne();
            commandService.Send(new StartDepositTransactionCommand(ObjectId.GenerateNewStringId(), account2, 1000));
            syncHelper.WaitOne();

            Console.WriteLine(string.Empty);

            //账户1向账户3转账300元,交易会失败,因为账户3不存在
            commandService.Send(new StartTransferTransactionCommand(ObjectId.GenerateNewStringId(), new TransferTransactionInfo(account1, account3, 300D)));
            syncHelper.WaitOne();
            Console.WriteLine(string.Empty);

            //账户1向账户2转账1200元,交易会失败,因为余额不足
            commandService.Send(new StartTransferTransactionCommand(ObjectId.GenerateNewStringId(), new TransferTransactionInfo(account1, account2, 1200D)));
            syncHelper.WaitOne();
            Console.WriteLine(string.Empty);

            //账户2向账户1转账500元,交易成功
            commandService.Send(new StartTransferTransactionCommand(ObjectId.GenerateNewStringId(), new TransferTransactionInfo(account2, account1, 500D)));
            syncHelper.WaitOne();

            Thread.Sleep(200);
            Console.WriteLine(string.Empty);
            Console.WriteLine("Press Enter to exit...");
            Console.ReadLine();
            _configuration.ShutdownEQueue();
        }
Пример #13
0
 public static void Stop()
 {
     _configuration
     .ShutdownEQueue();
 }