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()); }
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); } } } }
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(); }
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(); }