コード例 #1
0
        public void TestMakeAppointment()
        {
            //Setup
//            var connStr = @"Server=192.168.88.79\SQLEXPRESS;Database=appointments;User Id=chinook;Password=pr0t3ct3d";
            var connStr = @"Data Source=.\SQLEXPRESS;Database=appointments;User Id=chinook;Password=pr0t3ct3d";

            IMessageSender  sender     = new SqlMessageSender(connStr, "dbo.messages");
            ITextSerializer serializer = new JsonTextSerializer();
//			IEventStore eventStore = new SqlEventStore(connStr, "dbo.events");
//
//			IEventBus eventBus = new EventBus(sender, serializer);
//			IMetadataProvider metaProvider = new StandardMetadataProvider();
            IReadModelStorage <AppointmentReadModel> readModelStorage = new InMemeoryStorage <AppointmentReadModel>();
//
//			IEventSourcedRepository<AppointmentAggregate> repo = new
//				EventSourcedRepository<AppointmentAggregate>(eventStore, eventBus, serializer, metaProvider);
//			ICommandDispatcher cmdDispatcher = new CommandDispatcher();
//			cmdDispatcher.Register(new AppointmentCommandHandler(repo));
//
//			IEventDispatcher evtDispatcher = new EventDispatcher();
//			evtDispatcher.Register(new AppointmentEventHandler(readModelStorage));
//
//			IMessageReceiver cmdReceiver = new SqlMessageReceiver(connStr, "dbo.commands");
//
//			IMessageReceiver evtReceiver = new SqlMessageReceiver(connStr, "dbo.events");
//
//			CommandProcessor commandProcessor = new CommandProcessor(cmdReceiver, serializer, cmdDispatcher);
//			EventPorcessor eventProcessor = new EventPorcessor(evtReceiver, serializer, evtDispatcher);
//
//
//			commandProcessor.Start();
//
//			eventProcessor.Start();

            ICommandBus commandBus = new CommandBus(sender, serializer);

            //Test
            var command = new MakeAppointment();

            command.Appointment           = new Appointment();
            command.Appointment.Body      = "Dental appointment";
            command.Appointment.Subject   = "Dental";
            command.Appointment.Start     = DateTimeOffset.MinValue;
            command.Appointment.End       = DateTimeOffset.MaxValue;
            command.Appointment.Organizer = "Jeff Jin";
            var cmdTask = commandBus.Publish(new [] { command });

            cmdTask.Wait();

//			var task = readModelStorage.GetAll(0, 10);
//			task.Wait();
//
//			Thread.Sleep(3000);
//
//			//Verify
//			Assert.AreEqual(1, task.Result.Count());
        }
コード例 #2
0
        public void TestSendMessage()
        {
            var connStr = @"Data Source=.\SQLEXPRESS;Database=appointments;User Id=chinook;Password=pr0t3ct3d";
            var sender  = new SqlMessageSender(connStr, "dbo.messages");
            var msg1    = new Message("message body1", DateTime.Today, "12345678");
            var msg2    = new Message("message body2", DateTime.Today, "12345678");
            var msg3    = new Message("message body3", DateTime.Today, "12345678");
//            var task = sender.Send(msg1);
            var task = sender.Send(new List <Message> {
                msg1, msg2, msg3
            });

            task.Wait();
            var connectionFactory = new SqlConnectionFactory(connStr);
            var readQuery         = string.Format(
                CultureInfo.InvariantCulture,
                @"SELECT TOP(1)
                    {0}.[Id] AS [Id], 
                    {0}.[Body] AS [Body], 
                    {0}.[DeliveryDate] AS [DeliveryDate],
                    {0}.[CorrelationId] AS [CorrelationId]
                    FROM {0} WITH (UPDLOCK, READPAST)
                    WHERE ({0}.[DeliveryDate] IS NULL) OR ({0}.[DeliveryDate] <= @CurrentDate)
                    ORDER BY {0}.[Id] ASC",
                "messages");

            using (var connection = connectionFactory.CreateConnection(connStr))
            {
                connection.Open();
                using (var command = connection.CreateCommand())
                {
                    command.CommandType = CommandType.Text;
                    command.CommandText = readQuery;
                    ((SqlCommand)command).Parameters.Add("@CurrentDate", SqlDbType.DateTime).Value = DateTime.Now;

                    using (var reader = command.ExecuteReader())
                    {
                        if (!reader.Read())
                        {
                            return;
                        }

                        var body = (string)reader["Body"];
                        var deliveryDateValue = reader["DeliveryDate"];
                        var deliveryDate      = deliveryDateValue == DBNull.Value
                            ? (DateTime?)null
                            : new DateTime?((DateTime)deliveryDateValue);
                        var correlationId = (string)reader["CorrelationId"];

                        Assert.IsTrue(body.Contains("message body"));
                        Assert.AreEqual(correlationId, "12345678");
                        Assert.AreEqual(deliveryDate.Value.Date, DateTime.Today.Date);
                    }
                }
            }
        }
コード例 #3
0
        public static void Run(string connStr)
        {
            IMessageSender  sender     = new SqlMessageSender(connStr, "dbo.messages");
            ITextSerializer serializer = new JsonTextSerializer();
            IEventStore     eventStore = new SqlEventStore(connStr, "dbo.events");

            IEventBus         eventBus     = new EventBus(sender, serializer);
            IMetadataProvider metaProvider = new StandardMetadataProvider();

            IEventSourcedRepository <AppointmentAggregate> repo = new
                                                                  EventSourcedRepository <AppointmentAggregate>(eventStore, eventBus, serializer, metaProvider);
            ICommandDispatcher cmdDispatcher = new CommandDispatcher();

            cmdDispatcher.Register(new AppointmentCommandHandler(repo));

            IMessageReceiver cmdReceiver = new SqlMessageReceiver(connStr, "dbo.messages");

            CommandProcessor commandProcessor = new CommandProcessor(cmdReceiver, serializer, cmdDispatcher);

            commandProcessor.Start();
        }
コード例 #4
0
        public static void Run(string connStr)
        {
            IMessageSender  sender     = new SqlMessageSender(connStr, "dbo.messages");
            ITextSerializer serializer = new JsonTextSerializer();

            IEventStore       eventStore   = new SqlEventStore(connStr, "dbo.events");
            IEventBus         eventBus     = new EventBus(sender, serializer);
            IMetadataProvider metaProvider = new StandardMetadataProvider();
            IReadModelStorage <AppointmentReadModel> readModelStorage = new InMemeoryStorage <AppointmentReadModel>();

            IEventSourcedRepository <AppointmentAggregate> repo = new
                                                                  EventSourcedRepository <AppointmentAggregate>(eventStore, eventBus, serializer, metaProvider);

            IEventDispatcher evtDispatcher = new EventDispatcher();

            evtDispatcher.Register(new AppointmentEventHandler(readModelStorage));

            var evtReceiver = new SqlEventReceiver(new SqlEventStore(connStr, "dbo.events"));

            var eventProcessor = new EventProcessor(evtReceiver, serializer, evtDispatcher);

            eventProcessor.Start();
        }