Ejemplo n.º 1
0
        private void RegisterCommandProcessor()
        {
            //create handler
            var servicesHandlerFactory = new ServicesHandlerFactoryAsync(_container);
            var subscriberRegistry     = new SubscriberRegistry();

            _container.Register <IHandleRequestsAsync <AddGreetingCommand>, AddGreetingCommandHandlerAsync>(Lifestyle.Scoped);

            subscriberRegistry.RegisterAsync <AddGreetingCommand, AddGreetingCommandHandlerAsync>();

            //create policies
            var retryPolicy               = Policy.Handle <Exception>().WaitAndRetry(new[] { TimeSpan.FromMilliseconds(50), TimeSpan.FromMilliseconds(100), TimeSpan.FromMilliseconds(150) });
            var circuitBreakerPolicy      = Policy.Handle <Exception>().CircuitBreaker(1, TimeSpan.FromMilliseconds(500));
            var retryPolicyAsync          = Policy.Handle <Exception>().WaitAndRetryAsync(new[] { TimeSpan.FromMilliseconds(50), TimeSpan.FromMilliseconds(100), TimeSpan.FromMilliseconds(150) });
            var circuitBreakerPolicyAsync = Policy.Handle <Exception>().CircuitBreakerAsync(1, TimeSpan.FromMilliseconds(500));
            var policyRegistry            = new PolicyRegistry()
            {
                { CommandProcessor.RETRYPOLICY, retryPolicy },
                { CommandProcessor.CIRCUITBREAKER, circuitBreakerPolicy },
                { CommandProcessor.RETRYPOLICYASYNC, retryPolicyAsync },
                { CommandProcessor.CIRCUITBREAKERASYNC, circuitBreakerPolicyAsync }
            };


            var commandProcessor = CommandProcessorBuilder.With()
                                   .Handlers(new Paramore.Brighter.HandlerConfiguration(subscriberRegistry, servicesHandlerFactory))
                                   .Policies(policyRegistry)
                                   .NoTaskQueues()
                                   .RequestContextFactory(new Paramore.Brighter.InMemoryRequestContextFactory())
                                   .Build();

            _container.RegisterSingleton <IAmACommandProcessor>(commandProcessor);
        }
        private void RegisterCommandProcessor()
        {
            //create handler
            var subscriberRegistry = new SubscriberRegistry();

            RegisterBrighterHandlersFromAssembly(
                typeof(IHandleRequestsAsync <>),
                new Assembly[] { typeof(NewShipRegistrationHandlerAsync).Assembly },
                typeof(IHandleRequestsAsync <>).GetTypeInfo().Assembly,
                subscriberRegistry);

            //create policies
            var retryPolicy               = Policy.Handle <Exception>().WaitAndRetry(new[] { TimeSpan.FromMilliseconds(50), TimeSpan.FromMilliseconds(100), TimeSpan.FromMilliseconds(150) });
            var circuitBreakerPolicy      = Policy.Handle <Exception>().CircuitBreaker(1, TimeSpan.FromMilliseconds(500));
            var retryPolicyAsync          = Policy.Handle <Exception>().WaitAndRetryAsync(new[] { TimeSpan.FromMilliseconds(50), TimeSpan.FromMilliseconds(100), TimeSpan.FromMilliseconds(150) });
            var circuitBreakerPolicyAsync = Policy.Handle <Exception>().CircuitBreakerAsync(1, TimeSpan.FromMilliseconds(500));
            var policyRegistry            = new Paramore.Brighter.PolicyRegistry()
            {
                { CommandProcessor.RETRYPOLICY, retryPolicy },
                { CommandProcessor.CIRCUITBREAKER, circuitBreakerPolicy },
                { CommandProcessor.RETRYPOLICYASYNC, retryPolicyAsync },
                { CommandProcessor.CIRCUITBREAKERASYNC, circuitBreakerPolicyAsync }
            };

            var servicesHandlerFactory = new ServicesHandlerFactoryAsync(_container);

            var messagingGatewayConfiguration = RmqGatewayBuilder.With.Uri(new Uri(Configuration["Broker:Uri"]))
                                                .Exchange(Configuration["Broker:Exchange"])
                                                .DefaultQueues();

            var gateway         = new RmqMessageProducer(messagingGatewayConfiguration);
            var sqlMessageStore = new MySqlMessageStore(new MySqlMessageStoreConfiguration(Configuration["Database:MessageStore"], Configuration["Database:MessageTableName"]));

            var messageMapperFactory = new MessageMapperFactory(_container);

            var messageMapperRegistry = new MessageMapperRegistry(messageMapperFactory);

            RegisterMessageMappersFromAssembly(
                new Assembly[] { typeof(LineNameUpdatedEventMessageMapper).Assembly },
                typeof(IAmAMessageMapper <>).GetTypeInfo().Assembly,
                messageMapperRegistry);

            var messagingConfiguration = new MessagingConfiguration(
                messageStore: sqlMessageStore,
                messageProducer: gateway,
                messageMapperRegistry: messageMapperRegistry);

            var commandProcessor = CommandProcessorBuilder.With()
                                   .Handlers(new Paramore.Brighter.HandlerConfiguration(subscriberRegistry, servicesHandlerFactory))
                                   .Policies(policyRegistry)
                                   .TaskQueues(messagingConfiguration)
                                   .RequestContextFactory(new Paramore.Brighter.InMemoryRequestContextFactory())
                                   .Build();

            _container.RegisterInstance <IAmACommandProcessor>(commandProcessor);
        }
Ejemplo n.º 3
0
        private static Dispatcher CreateDispatcher(
            Container container,
            List <Connection> connections, RmqMessageConsumerFactory rmqMessageConsumerFactory,
            RmqMessageProducerFactory rmqMessageProducerFactory
            )
        {
            var handlerFactoryAsync = new ServicesHandlerFactoryAsync(container);

            container.Register <IHandleRequestsAsync <BulkAddToDoCommand>, BulkAddToDoCommandHandlerAsync>();
            var messageMapperFactory = new MessageMapperFactory(container);

            container.Register <IAmAMessageMapper <BulkAddToDoCommand>, BulkAddToDoMessageMapper>();

            var subscriberRegistry = new SubscriberRegistry();

            subscriberRegistry.RegisterAsync <BulkAddToDoCommand, BulkAddToDoCommandHandlerAsync>();

            //create policies
            var retryPolicy               = Policy.Handle <Exception>().WaitAndRetry(new[] { TimeSpan.FromMilliseconds(50), TimeSpan.FromMilliseconds(100), TimeSpan.FromMilliseconds(150) });
            var circuitBreakerPolicy      = Policy.Handle <Exception>().CircuitBreaker(1, TimeSpan.FromMilliseconds(500));
            var retryPolicyAsync          = Policy.Handle <Exception>().WaitAndRetryAsync(new[] { TimeSpan.FromMilliseconds(50), TimeSpan.FromMilliseconds(100), TimeSpan.FromMilliseconds(150) });
            var circuitBreakerPolicyAsync = Policy.Handle <Exception>().CircuitBreakerAsync(1, TimeSpan.FromMilliseconds(500));
            var policyRegistry            = new PolicyRegistry()
            {
                { CommandProcessor.RETRYPOLICY, retryPolicy },
                { CommandProcessor.CIRCUITBREAKER, circuitBreakerPolicy },
                { CommandProcessor.RETRYPOLICYASYNC, retryPolicyAsync },
                { CommandProcessor.CIRCUITBREAKERASYNC, circuitBreakerPolicyAsync }
            };

            //create message mappers
            var messageMapperRegistry = new MessageMapperRegistry(messageMapperFactory)
            {
                { typeof(BulkAddToDoCommand), typeof(BulkAddToDoMessageMapper) }
            };

            var builder = DispatchBuilder
                          .With()
                          .CommandProcessor(CommandProcessorBuilder.With()
                                            .Handlers(new HandlerConfiguration(subscriberRegistry, handlerFactoryAsync))
                                            .Policies(policyRegistry)
                                            .NoTaskQueues()
                                            .RequestContextFactory(new InMemoryRequestContextFactory())
                                            .Build()
                                            )
                          .MessageMappers(messageMapperRegistry)
                          .DefaultChannelFactory(new InputChannelFactory(rmqMessageConsumerFactory, rmqMessageProducerFactory))
                          .Connections(connections);

            var dispatcher = builder.Build();

            return(dispatcher);
        }
Ejemplo n.º 4
0
        private void RegisterCommandProcessor()
        {
            //create handler
            var subscriberRegistry = new SubscriberRegistry();

            _container.Register <IHandleRequestsAsync <AddToDoCommand>, AddToDoCommandHandlerAsync>(Lifestyle.Scoped);
            _container.Register <IHandleRequestsAsync <DeleteAllToDosCommand>, DeleteAllToDosCommandHandlerAsync>(Lifestyle.Scoped);
            _container.Register <IHandleRequestsAsync <DeleteToDoByIdCommand>, DeleteToDoByIdCommandHandlerAsync>(Lifestyle.Scoped);
            _container.Register <IHandleRequestsAsync <UpdateToDoCommand>, UpdateToDoCommandHandlerAsync>(Lifestyle.Scoped);

            subscriberRegistry.RegisterAsync <AddToDoCommand, AddToDoCommandHandlerAsync>();
            subscriberRegistry.RegisterAsync <DeleteAllToDosCommand, DeleteAllToDosCommandHandlerAsync>();
            subscriberRegistry.RegisterAsync <DeleteToDoByIdCommand, DeleteToDoByIdCommandHandlerAsync>();
            subscriberRegistry.RegisterAsync <UpdateToDoCommand, UpdateToDoCommandHandlerAsync>();

            //create policies
            var retryPolicy               = Policy.Handle <Exception>().WaitAndRetry(new[] { TimeSpan.FromMilliseconds(50), TimeSpan.FromMilliseconds(100), TimeSpan.FromMilliseconds(150) });
            var circuitBreakerPolicy      = Policy.Handle <Exception>().CircuitBreaker(1, TimeSpan.FromMilliseconds(500));
            var retryPolicyAsync          = Policy.Handle <Exception>().WaitAndRetryAsync(new[] { TimeSpan.FromMilliseconds(50), TimeSpan.FromMilliseconds(100), TimeSpan.FromMilliseconds(150) });
            var circuitBreakerPolicyAsync = Policy.Handle <Exception>().CircuitBreakerAsync(1, TimeSpan.FromMilliseconds(500));
            var policyRegistry            = new PolicyRegistry()
            {
                { CommandProcessor.RETRYPOLICY, retryPolicy },
                { CommandProcessor.CIRCUITBREAKER, circuitBreakerPolicy },
                { CommandProcessor.RETRYPOLICYASYNC, retryPolicyAsync },
                { CommandProcessor.CIRCUITBREAKERASYNC, circuitBreakerPolicyAsync }
            };

            var servicesHandlerFactory = new ServicesHandlerFactoryAsync(_container);

            var messagingGatewayConfiguration = RmqGatewayBuilder.With.Uri(new Uri(Configuration["RabbitMQ:Uri"])).Exchange(Configuration["RabbitMQ:Exchange"]).DefaultQueues();

            var gateway         = new RmqMessageProducer(messagingGatewayConfiguration);
            var sqlMessageStore = new MySqlMessageStore(new MySqlMessageStoreConfiguration(Configuration["Database:MessageStore"], Configuration["Database:MessageTableName"]));

            var messageMapperFactory = new MessageMapperFactory(_container);

            _container.Register <IAmAMessageMapper <BulkAddToDoCommand>, BulkAddToDoMessageMapper>();
            _container.Register <IAmAMessageMapper <TaskCompletedEvent>, TaskCompleteEventMessageMapper>();
            _container.Register <IAmAMessageMapper <TaskCreatedEvent>, TaskCreatedEventMessageMapper>();

            var messageMapperRegistry = new MessageMapperRegistry(messageMapperFactory)
            {
                { typeof(BulkAddToDoCommand), typeof(BulkAddToDoMessageMapper) },
                { typeof(TaskCompletedEvent), typeof(TaskCompleteEventMessageMapper) },
                { typeof(TaskCreatedEvent), typeof(TaskCreatedEventMessageMapper) }
            };

            var messagingConfiguration = new MessagingConfiguration(
                messageStore: sqlMessageStore,
                messageProducer: gateway,
                messageMapperRegistry: messageMapperRegistry);

            var commandProcessor = CommandProcessorBuilder.With()
                                   .Handlers(new Paramore.Brighter.HandlerConfiguration(subscriberRegistry, servicesHandlerFactory))
                                   .Policies(policyRegistry)
                                   .TaskQueues(messagingConfiguration)
                                   .RequestContextFactory(new Paramore.Brighter.InMemoryRequestContextFactory())
                                   .Build();

            _container.RegisterSingleton <IAmACommandProcessor>(commandProcessor);
        }