partial void OnCreateContainer(UnityContainer container) { var metadata = container.Resolve<IMetadataProvider>(); var serializer = container.Resolve<ITextSerializer>(); var commandBus = new CommandBus(new TopicSender(azureSettings.ServiceBus, Topics.Commands.Path), metadata, serializer); var topicSender = new TopicSender(azureSettings.ServiceBus, Topics.Events.Path); container.RegisterInstance<IMessageSender>(topicSender); var eventBus = new EventBus(topicSender, metadata, serializer); var commandProcessor = new CommandProcessor(new SubscriptionReceiver(azureSettings.ServiceBus, Topics.Commands.Path, Topics.Commands.Subscriptions.All), serializer); container.RegisterInstance<ICommandBus>(commandBus); container.RegisterInstance<IEventBus>(eventBus); container.RegisterInstance<ICommandHandlerRegistry>(commandProcessor); container.RegisterInstance<IProcessor>("CommandProcessor", commandProcessor); RegisterRepository(container); RegisterEventProcessors(container); // message log var messageLogAccount = CloudStorageAccount.Parse(azureSettings.MessageLog.ConnectionString); container.RegisterInstance<IProcessor>("EventLogger", new AzureMessageLogListener( new AzureMessageLogWriter(messageLogAccount, azureSettings.MessageLog.TableName), new SubscriptionReceiver(azureSettings.ServiceBus, Topics.Events.Path, Topics.Events.Subscriptions.Log))); container.RegisterInstance<IProcessor>("CommandLogger", new AzureMessageLogListener( new AzureMessageLogWriter(messageLogAccount, azureSettings.MessageLog.TableName), new SubscriptionReceiver(azureSettings.ServiceBus, Topics.Commands.Path, Topics.Commands.Subscriptions.Log))); }
public void when_handler_already_registered_for_command_then_throws() { var processor = new CommandProcessor(Mock.Of<IMessageReceiver>(), Mock.Of<ITextSerializer>()); var handler1 = Mock.Of<ICommandHandler<FooCommand>>(); var handler2 = Mock.Of<ICommandHandler<FooCommand>>(); processor.Register(handler1); Assert.Throws<ArgumentException>(() => processor.Register(handler2)); }
partial void OnCreateContainer(UnityContainer container) { var metadata = container.Resolve<IMetadataProvider>(); var serializer = container.Resolve<ITextSerializer>(); // blob var blobStorageAccount = CloudStorageAccount.Parse(azureSettings.BlobStorage.ConnectionString); container.RegisterInstance<IBlobStorage>(new CloudBlobStorage(blobStorageAccount, azureSettings.BlobStorage.RootContainerName)); var commandBus = new CommandBus(new TopicSender(azureSettings.ServiceBus, Topics.Commands.Path), metadata, serializer); var eventsTopicSender = new TopicSender(azureSettings.ServiceBus, Topics.Events.Path); container.RegisterInstance<IMessageSender>("events", eventsTopicSender); container.RegisterInstance<IMessageSender>("orders", new TopicSender(azureSettings.ServiceBus, Topics.EventsOrders.Path)); container.RegisterInstance<IMessageSender>("seatsavailability", new TopicSender(azureSettings.ServiceBus, Topics.EventsAvailability.Path)); var eventBus = new EventBus(eventsTopicSender, metadata, serializer); var sessionlessCommandProcessor = new CommandProcessor(new SubscriptionReceiver(azureSettings.ServiceBus, Topics.Commands.Path, Topics.Commands.Subscriptions.Sessionless, false, new SubscriptionReceiverInstrumentation(Topics.Commands.Subscriptions.Sessionless, this.instrumentationEnabled)), serializer); var seatsAvailabilityCommandProcessor = new CommandProcessor(new SessionSubscriptionReceiver(azureSettings.ServiceBus, Topics.Commands.Path, Topics.Commands.Subscriptions.Seatsavailability, false, new SessionSubscriptionReceiverInstrumentation(Topics.Commands.Subscriptions.Seatsavailability, this.instrumentationEnabled)), serializer); var synchronousCommandBus = new SynchronousCommandBusDecorator(commandBus); container.RegisterInstance<ICommandBus>(synchronousCommandBus); container.RegisterInstance<IEventBus>(eventBus); container.RegisterInstance<IProcessor>("SessionlessCommandProcessor", sessionlessCommandProcessor); container.RegisterInstance<IProcessor>("SeatsAvailabilityCommandProcessor", seatsAvailabilityCommandProcessor); RegisterRepositories(container); RegisterEventProcessors(container); RegisterCommandHandlers(container, sessionlessCommandProcessor, seatsAvailabilityCommandProcessor); // handle order commands inline, as they do not have competition. synchronousCommandBus.Register(container.Resolve<ICommandHandler>("OrderCommandHandler")); // message log var messageLogAccount = CloudStorageAccount.Parse(azureSettings.MessageLog.ConnectionString); container.RegisterInstance<IProcessor>("EventLogger", new AzureMessageLogListener( new AzureMessageLogWriter(messageLogAccount, azureSettings.MessageLog.TableName), new SubscriptionReceiver(azureSettings.ServiceBus, Topics.Events.Path, Topics.Events.Subscriptions.Log))); container.RegisterInstance<IProcessor>("OrderEventLogger", new AzureMessageLogListener( new AzureMessageLogWriter(messageLogAccount, azureSettings.MessageLog.TableName), new SubscriptionReceiver(azureSettings.ServiceBus, Topics.EventsOrders.Path, Topics.EventsOrders.Subscriptions.LogOrders))); container.RegisterInstance<IProcessor>("SeatsAvailabilityEventLogger", new AzureMessageLogListener( new AzureMessageLogWriter(messageLogAccount, azureSettings.MessageLog.TableName), new SubscriptionReceiver(azureSettings.ServiceBus, Topics.EventsAvailability.Path, Topics.EventsAvailability.Subscriptions.LogAvail))); container.RegisterInstance<IProcessor>("CommandLogger", new AzureMessageLogListener( new AzureMessageLogWriter(messageLogAccount, azureSettings.MessageLog.TableName), new SubscriptionReceiver(azureSettings.ServiceBus, Topics.Commands.Path, Topics.Commands.Subscriptions.Log))); }
public void when_disposing_processor_then_disposes_receiver_if_disposable() { var receiver = new Mock<IMessageReceiver>(); var disposable = receiver.As<IDisposable>(); var processor = new CommandProcessor(receiver.Object, Mock.Of<ITextSerializer>()); processor.Dispose(); disposable.Verify(x => x.Dispose()); }
partial void OnCreateContainer(UnityContainer container) { var metadata = container.Resolve<IMetadataProvider>(); var serializer = container.Resolve<ITextSerializer>(); // blob var blobStorageAccount = CloudStorageAccount.Parse(azureSettings.BlobStorage.ConnectionString); container.RegisterInstance<IBlobStorage>(new SqlBlobStorage("BlobStorage")); var commandBus = new CommandBus(new TopicSender(azureSettings.ServiceBus, Topics.Commands.Path), metadata, serializer); var topicSender = new TopicSender(azureSettings.ServiceBus, Topics.Events.Path); container.RegisterInstance<IMessageSender>(topicSender); var eventBus = new EventBus(topicSender, metadata, serializer); var commandProcessor = new CommandProcessor(new SubscriptionReceiver(azureSettings.ServiceBus, Topics.Commands.Path, "all", false, new SubscriptionReceiverInstrumentation("all", this.instrumentationEnabled)), serializer); container.RegisterInstance<ICommandBus>(commandBus); container.RegisterInstance<IEventBus>(eventBus); container.RegisterInstance<IProcessor>("CommandProcessor", commandProcessor); RegisterRepository(container); RegisterEventProcessors(container); RegisterCommandHandlers(container, commandProcessor); }
public void when_disposing_processor_then_no_op_if_receiver_not_disposable() { var processor = new CommandProcessor(Mock.Of<IMessageReceiver>(), Mock.Of<ITextSerializer>()); processor.Dispose(); }