private CommandProcessor CommandProcessorRegistrar(TinyIoCContainer container)
        {
            //Database dao
            container.Register<ITasksDAO, TasksDAO>().AsSingleton();

            //create handler 
            var handlerFactory = new TinyIocHandlerFactory(container);
            var subscriberRegistry = new SubscriberRegistry();
            container.Register<IHandleRequests<AddTaskCommand>, AddTaskCommandHandler>().AsMultiInstance();
            subscriberRegistry.Register<AddTaskCommand, AddTaskCommandHandler>();

            //complete handler 
            container.Register<IHandleRequests<CompleteTaskCommand>, CompleteTaskCommandHandler>().AsMultiInstance();
            subscriberRegistry.Register<CompleteTaskCommand, CompleteTaskCommandHandler>();
            
            //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 policyRegistry = new PolicyRegistry() { { CommandProcessor.RETRYPOLICY, retryPolicy }, { CommandProcessor.CIRCUITBREAKER, circuitBreakerPolicy } };

            //create message mappers
            container.Register<IAmAMessageMapper<TaskReminderCommand>, TaskReminderCommandMessageMapper>().AsMultiInstance();
            var messageMapperFactory = new TinyIoCMessageMapperFactory(container);
            var messageMapperRegistry = new MessageMapperRegistry(messageMapperFactory);
            messageMapperRegistry.Add(typeof(TaskReminderCommand), typeof(TaskReminderCommandMessageMapper));
            messageMapperRegistry.Add(typeof(TaskAddedEvent), typeof(TaskAddedEventMapper));
            messageMapperRegistry.Add(typeof(TaskEditedEvent), typeof(TaskEditedEventMapper));
            messageMapperRegistry.Add(typeof(TaskCompletedEvent), typeof(TaskCompletedEventMapper));
            messageMapperRegistry.Add(typeof(TaskReminderSentEvent), typeof(TaskReminderSentEventMapper));

           
            var gateway = new RmqMessageProducer();
            IAmAMessageStore<Message> sqlMessageStore = new MsSqlMessageStore(new MsSqlMessageStoreConfiguration("Server=.;Database=brighterMessageStore;Trusted_Connection=True", "messages", MsSqlMessageStoreConfiguration.DatabaseType.MsSqlServer));
            var commandProcessor =
                CommandProcessorBuilder.With()
                    .Handlers(new HandlerConfiguration(subscriberRegistry, handlerFactory))
                    .Policies(policyRegistry)
                    .TaskQueues(new MessagingConfiguration(sqlMessageStore, gateway, messageMapperRegistry))
                    .RequestContextFactory(new InMemoryRequestContextFactory())
                    .Build();

            container.Register<IAmACommandProcessor>(commandProcessor);

            return commandProcessor;
        }
        public MeetingAndManagementService()
        {
            log4net.Config.XmlConfigurator.Configure();
            //Create a logger
            var logger = LogProvider.For<MeetingAndManagementService>();

            var container = new TinyIoCContainer();
            container.Register<ILog>(logger);

            var handlerFactory = new TinyIocHandlerFactory(container);
            var messageMapperFactory = new TinyIoCMessageMapperFactory(container);
            container.Register<IHandleRequests<GreetingCommand>, GreetingCommandHandler>();

            var subscriberRegistry = new SubscriberRegistry();
            subscriberRegistry.Register<GreetingCommand, GreetingCommandHandler>();

            //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 policyRegistry = new PolicyRegistry()
            {
                {CommandProcessor.RETRYPOLICY, retryPolicy},
                {CommandProcessor.CIRCUITBREAKER, circuitBreakerPolicy}
            };

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

            //create the gateway
            var rmqMessageConsumerFactory = new RmqMessageConsumerFactory(logger);
            var rmqMessageProducerFactory = new RmqMessageProducerFactory(logger);
            var builder = DispatchBuilder
                .With()
                .Logger(logger)
                .CommandProcessor(CommandProcessorBuilder.With()
                    .Handlers(new HandlerConfiguration(subscriberRegistry, handlerFactory))
                    .Policies(policyRegistry)
                    .Logger(logger)
                    .NoTaskQueues()
                    .RequestContextFactory(new InMemoryRequestContextFactory())
                    .Build()
                 )
                 .MessageMappers(messageMapperRegistry)
                 .ChannelFactory(new InputChannelFactory(rmqMessageConsumerFactory, rmqMessageProducerFactory))
                 .ConnectionsFromConfiguration();
            _dispatcher = builder.Build();

            var controlBusBuilder = ControlBusBuilder
                .With()
                .Logger(logger)
                .Dispatcher(_dispatcher)
                .ChannelFactory(new InputChannelFactory(rmqMessageConsumerFactory, rmqMessageProducerFactory)) as ControlBusBuilder;
            _controlDispatcher = builder.Build();
        }
        public MeetingAndManagementService()
        {
            log4net.Config.XmlConfigurator.Configure();
            //Create a logger
            var logger = LogProvider.For<MeetingAndManagementService>();

            var container = new TinyIoCContainer();
            container.Register<ILog>(logger);

            var handlerFactory = new TinyIocHandlerFactory(container);
            var messageMapperFactory = new TinyIoCMessageMapperFactory(container);
            container.Register<IHandleRequests<GreetingCommand>, GreetingCommandHandler>();

            var subscriberRegistry = new SubscriberRegistry();
            subscriberRegistry.Register<GreetingCommand, GreetingCommandHandler>();

            //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 policyRegistry = new PolicyRegistry()
            {
                {CommandProcessor.RETRYPOLICY, retryPolicy},
                {CommandProcessor.CIRCUITBREAKER, circuitBreakerPolicy}
            };

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

            //create the gateway
            var rmqMessageConsumerFactory = new RmqMessageConsumerFactory(logger);
            var rmqMessageProducerFactory = new RmqMessageProducerFactory(logger);
            var builder = DispatchBuilder
                .With()
                .Logger(logger)
                .CommandProcessor(CommandProcessorBuilder.With()
                    .Handlers(new HandlerConfiguration(subscriberRegistry, handlerFactory))
                    .Policies(policyRegistry)
                    .Logger(logger)
                    .NoTaskQueues()
                    .RequestContextFactory(new InMemoryRequestContextFactory())
                    .Build()
                 )
                 .MessageMappers(messageMapperRegistry)
                 .ChannelFactory(new InputChannelFactory(rmqMessageConsumerFactory, rmqMessageProducerFactory))
                 .ConnectionsFromConfiguration();
            _dispatcher = builder.Build();

            var controlBusBuilder = ControlBusReceiverBuilder
                .With()
                .Logger(logger)
                .Dispatcher(_dispatcher)
                .ChannelFactory(new InputChannelFactory(rmqMessageConsumerFactory, rmqMessageProducerFactory)) as ControlBusReceiverBuilder;
            _controlDispatcher = builder.Build();

            container.Register<IAmAControlBusSender>(new ControlBusSenderFactory().Create(
                new MsSqlMessageStore(new MsSqlMessageStoreConfiguration(
                    "DataSource=\"" + Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase.Substring(8)), "App_Data\\MessageStore.sdf") + "\"", "Messages", 
                    MsSqlMessageStoreConfiguration.DatabaseType.SqlCe), 
                    logger), 
                new RmqMessageProducer(container.Resolve<ILog>()), 
                logger));
        }
        private PipelineContinuation InitializeContainer(ICommunicationContext arg)
        {
            var container = new TinyIoCContainer();
            container.Register<IHandleRequests<AddTaskCommand>, AddTaskCommandHandler>().AsMultiInstance();
            container.Register<ITaskListRetriever, TaskListRetriever>().AsMultiInstance();
            container.Register<ITasksDAO, TasksDAO>().AsMultiInstance();
            var logger = LogManager.GetLogger("TaskList");
            container.Register<ILog, ILog>(logger);
            container.Register<IAmARequestContextFactory, InMemoryRequestContextFactory>().AsMultiInstance();
            container.Register<IAmAMessageStore<Message>, RavenMessageStore>().AsSingleton();
            container.Register<IAmAMessagingGateway, RMQMessagingGateway>().AsSingleton();

            var handlerFactory = new TinyIocHandlerFactory(container);
            var messageMapperFactory = new TinyIoCMessageMapperFactory(container);

            var subscriberRegistry = new SubscriberRegistry();
            subscriberRegistry.Register<AddTaskCommand, AddTaskCommandHandler>();

            //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 policyRegistry = new PolicyRegistry()
            {
                {CommandProcessor.RETRYPOLICY, retryPolicy},
                {CommandProcessor.CIRCUITBREAKER, circuitBreakerPolicy}
            };

            //create message mappers
            var messageMapperRegistry = new MessageMapperRegistry(messageMapperFactory);

            //create the gateway
            var gateway = new RMQMessagingGateway(logger);

            var commandProcessor = CommandProcessorBuilder.With()
                    .Handlers(new HandlerConfiguration(subscriberRegistry, handlerFactory))
                    .Policies(policyRegistry)
                    .Logger(logger)
                    .TaskQueues(new MessagingConfiguration(
                        messageStore: new RavenMessageStore(new EmbeddableDocumentStore(), logger),
                        messagingGateway: gateway,
                        messageMapperRegistry: messageMapperRegistry
                        ))
                    .RequestContextFactory(new InMemoryRequestContextFactory())
                    .Build();

            resolver.AddDependencyInstance<IAmACommandProcessor>(commandProcessor, DependencyLifetime.Singleton);
            resolver.AddDependency<ITaskRetriever, TaskRetriever>(DependencyLifetime.Singleton);
            resolver.AddDependency<ITaskListRetriever, TaskListRetriever>(DependencyLifetime.Singleton);


            return PipelineContinuation.Continue;
        }
示例#5
0
        public ManagementAndMonitoringService()
        {
            log4net.Config.XmlConfigurator.Configure();

            var container = new TinyIoCContainer();

            var handlerFactory       = new TinyIocHandlerFactory(container);
            var messageMapperFactory = new TinyIoCMessageMapperFactory(container);

            container.Register <IHandleRequests <GreetingCommand>, GreetingCommandHandler>();

            var subscriberRegistry = new SubscriberRegistry();

            subscriberRegistry.Register <GreetingCommand, GreetingCommandHandler>();

            //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 policyRegistry = new PolicyRegistry()
            {
                { CommandProcessor.RETRYPOLICY, retryPolicy },
                { CommandProcessor.CIRCUITBREAKER, circuitBreakerPolicy }
            };

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

            var rmqGatewayMessages = new RmqMessagingGatewayConnection
            {
                AmpqUri  = new AmqpUriSpecification(new Uri("amqp://*****:*****@localhost:5672/%2f")),
                Exchange = new Exchange("paramore.brighter.exchange"),
            };
            var rmqGatewayMonitoring = new RmqMessagingGatewayConnection
            {
                AmpqUri  = new AmqpUriSpecification(new Uri("amqp://*****:*****@localhost:5672/%2f")),
                Exchange = new Exchange("paramore.brighter.exchange"),
            };

            //create the gateway
            var rmqMessageConsumerFactory = new RmqMessageConsumerFactory(rmqGatewayMessages);
            var rmqMessageProducerFactory = new RmqMessageProducerFactory(rmqGatewayMessages);

            var connections = new List <Connection>
            {
            };

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

            _dispatcher = builder.Build();

            var controlBusBuilder = ControlBusReceiverBuilder
                                    .With()
                                    .Dispatcher(_dispatcher)
                                    .ProducerFactory(rmqMessageProducerFactory)
                                    .ChannelFactory(new InputChannelFactory(rmqMessageConsumerFactory, rmqMessageProducerFactory)) as ControlBusReceiverBuilder;

            _controlDispatcher = controlBusBuilder.Build(Environment.MachineName + "." + "ManagementAndMonitoring");

            container.Register <IAmAControlBusSender>(new ControlBusSenderFactory().Create(
                                                          new SqliteMessageStore(
                                                              new SqliteMessageStoreConfiguration(
                                                                  "DataSource=\"" + Path.Combine(Path.GetDirectoryName(typeof(GreetingCommand).GetTypeInfo().Assembly.CodeBase.Substring(8)), "App_Data\\MessageStore.sdf") + "\"", "Messages")
                                                              ),
                                                          new RmqMessageProducer(rmqGatewayMonitoring)));
        }
示例#6
0
        public static void Main(string[] args)
        {
            Log.Logger = new LoggerConfiguration()
                         .WriteTo.Console()
                         .CreateLogger();

            var container = new TinyIoCContainer();

            var handlerFactory       = new TinyIocHandlerFactory(container);
            var messageMapperFactory = new TinyIoCMessageMapperFactory(container);

            container.Register <IHandleRequests <GreetingEvent>, GreetingEventHandler>();

            var subscriberRegistry = new SubscriberRegistry();

            subscriberRegistry.Register <GreetingEvent, GreetingEventHandler>();

            //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 policyRegistry = new PolicyRegistry
            {
                { CommandProcessor.RETRYPOLICY, retryPolicy },
                { CommandProcessor.CIRCUITBREAKER, circuitBreakerPolicy }
            };

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

            //create the gateway
            var messagingConfiguration =
                new MsSqlMessagingGatewayConfiguration(
                    @"Database=BrighterSqlQueue;Server=.\sqlexpress;Integrated Security=SSPI;", "QueueData");
            var messageConsumerFactory = new MsSqlMessageConsumerFactory(messagingConfiguration);

            var dispatcher = DispatchBuilder.With()
                             .CommandProcessor(CommandProcessorBuilder.With()
                                               .Handlers(new HandlerConfiguration(subscriberRegistry, handlerFactory))
                                               .Policies(policyRegistry)
                                               .NoTaskQueues()
                                               .RequestContextFactory(new InMemoryRequestContextFactory())
                                               .Build())
                             .MessageMappers(messageMapperRegistry)
                             .DefaultChannelFactory(new ChannelFactory(messageConsumerFactory))
                             .Connections(new Connection[]
            {
                new Connection <GreetingEvent>(
                    new ConnectionName("paramore.example.greeting"),
                    new ChannelName("greeting.event"),
                    new RoutingKey("greeting.event"),
                    timeoutInMilliseconds: 200)
            }).Build();

            dispatcher.Receive();

            Console.WriteLine("Press Enter to stop ...");
            Console.ReadLine();

            dispatcher.End().Wait();
        }
示例#7
0
        public static void Main()
        {
            Log.Logger = new LoggerConfiguration()
                         .WriteTo.LiterateConsole()
                         .CreateLogger();

            var container            = new TinyIoCContainer();
            var handlerFactory       = new TinyIocHandlerFactory(container);
            var messageMapperFactory = new TinyIoCMessageMapperFactory(container);

            container.Register <IHandleRequests <GreetingCommand>, GreetingCommandHandler>();

            var subscriberRegistry = new SubscriberRegistry();

            subscriberRegistry.Register <GreetingCommand, GreetingCommandHandler>();

            //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 policyRegistry = new PolicyRegistry()
            {
                { CommandProcessor.RETRYPOLICY, retryPolicy },
                { CommandProcessor.CIRCUITBREAKER, circuitBreakerPolicy }
            };

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

            var rmqGatewayMessages = RmqGatewayBuilder.With
                                     .Uri(new Uri("amqp://*****:*****@localhost:5672/%2f"))
                                     .Exchange("paramore.brighter.exchange")
                                     .DefaultQueues();

            var rmqMessageProducerFactory = new RmqMessageProducerFactory(rmqGatewayMessages);

            var inputChannelFactory = new InputChannelFactory(new RmqMessageConsumerFactory(rmqGatewayMessages), rmqMessageProducerFactory);
            var builder             = DispatchBuilder
                                      .With()
                                      .CommandProcessor(CommandProcessorBuilder.With()
                                                        .Handlers(new HandlerConfiguration(subscriberRegistry, handlerFactory))
                                                        .Policies(policyRegistry)
                                                        .NoTaskQueues()
                                                        .RequestContextFactory(new InMemoryRequestContextFactory())
                                                        .Build()
                                                        )
                                      .MessageMappers(messageMapperRegistry)
                                      .DefaultChannelFactory(inputChannelFactory)
                                      .Connections(new[]
            {
                ConnectionBuilder.With
                .Name("paramore.example.greeting")
                .ChannelFactory(inputChannelFactory)
                .Type(typeof(GreetingCommand))
                .ChannelName("greeting.event")
                .RoutingKey("greeting.event")
                .Timeout(200)
                .Build()
            });

            _dispatcher = builder.Build();

            var controlBusBuilder = ControlBusReceiverBuilder
                                    .With()
                                    .Dispatcher(_dispatcher)
                                    .ProducerFactory(rmqMessageProducerFactory)
                                    .ChannelFactory(inputChannelFactory) as ControlBusReceiverBuilder;
            var controlDispatcher = controlBusBuilder.Build(Environment.MachineName + "." + "ManagementAndMonitoring");

            container.Register <IAmAControlBusSender>(new ControlBusSenderFactory().Create(
                                                          new SqliteMessageStore(
                                                              new SqliteMessageStoreConfiguration(
                                                                  "DataSource=\"" + Path.Combine(Path.GetDirectoryName(typeof(GreetingCommand).GetTypeInfo().Assembly.CodeBase.Substring(8)), "App_Data\\MessageStore.sdf") + "\"", "Messages")
                                                              ),
                                                          new RmqMessageProducer(RmqGatewayBuilder.With
                                                                                 .Uri(new Uri("amqp://*****:*****@localhost:5672/%2f"))
                                                                                 .Exchange("paramore.brighter.exchange")
                                                                                 .DefaultQueues())));

            controlDispatcher.Receive();
            _dispatcher.Receive();

            Console.WriteLine("Press Enter to stop ...");
            Console.ReadLine();

            controlDispatcher.End();   //Don't wait on the control bus, we are stopping so we don't want any more control messages, just terminate
            _dispatcher.End().Wait();
        }
示例#8
0
        public GreetingService()
        {
            log4net.Config.XmlConfigurator.Configure(new FileInfo("log4net.config"));

            var container = new TinyIoCContainer();

            var handlerFactory       = new TinyIocHandlerFactory(container);
            var messageMapperFactory = new TinyIoCMessageMapperFactory(container);

            container.Register <IHandleRequests <GreetingEvent>, GreetingEventHandler>();

            var subscriberRegistry = new SubscriberRegistry();

            subscriberRegistry.Register <GreetingEvent, GreetingEventHandler>();

            //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 policyRegistry = new PolicyRegistry
            {
                { CommandProcessor.RETRYPOLICY, retryPolicy },
                { CommandProcessor.CIRCUITBREAKER, circuitBreakerPolicy }
            };

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

            //create the gateway
            var rmqConnnection = new RmqMessagingGatewayConnection
            {
                AmpqUri  = new AmqpUriSpecification(new Uri("amqp://*****:*****@localhost:5672/%2f")),
                Exchange = new Exchange("paramore.brighter.exchange"),
            };

            var rmqMessageConsumerFactory = new RmqMessageConsumerFactory(rmqConnnection);
            var rmqMessageProducerFactory = new RmqMessageProducerFactory(rmqConnnection);

            _dispatcher = DispatchBuilder.With()
                          .CommandProcessor(CommandProcessorBuilder.With()
                                            .Handlers(new HandlerConfiguration(subscriberRegistry, handlerFactory))
                                            .Policies(policyRegistry)
                                            .NoTaskQueues()
                                            .RequestContextFactory(new InMemoryRequestContextFactory())
                                            .Build())
                          .MessageMappers(messageMapperRegistry)
                          .DefaultChannelFactory(new InputChannelFactory(rmqMessageConsumerFactory, rmqMessageProducerFactory))
                          .Connections(new []
            {
                new Connection <GreetingEvent>(
                    new ConnectionName("paramore.example.greeting"),
                    new ChannelName("greeting.event"),
                    new RoutingKey("greeting.event"),
                    timeoutInMilliseconds: 200)
            }).Build();
        }
示例#9
0
        private static void Main()
        {
            Log.Logger = new LoggerConfiguration()
                         .MinimumLevel.Warning()
                         .WriteTo.Console()
                         .CreateLogger();

            var container = new TinyIoCContainer();

            var handlerFactory       = new TinyIocHandlerFactory(container);
            var messageMapperFactory = new TinyIoCMessageMapperFactory(container);

            container.Register <IAmACommandCounter, CommandCounter>();
            container.Register <IHandleRequests <CompetingConsumerCommand>, CompetingConsumerCommandHandler>();

            var subscriberRegistry = new SubscriberRegistry();

            subscriberRegistry.Register <CompetingConsumerCommand, CompetingConsumerCommandHandler>();

            //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 policyRegistry = new PolicyRegistry
            {
                { CommandProcessor.RETRYPOLICY, retryPolicy },
                { CommandProcessor.CIRCUITBREAKER, circuitBreakerPolicy }
            };

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

            //create the gateway
            var messagingConfiguration =
                new MsSqlMessagingGatewayConfiguration(
                    @"Database=BrighterSqlQueue;Server=.\sqlexpress;Integrated Security=SSPI;", "QueueData");
            var messageConsumerFactory = new MsSqlMessageConsumerFactory(messagingConfiguration);

            var dispatcher = DispatchBuilder.With()
                             .CommandProcessor(CommandProcessorBuilder.With()
                                               .Handlers(new HandlerConfiguration(subscriberRegistry, handlerFactory))
                                               .Policies(policyRegistry)
                                               .NoTaskQueues()
                                               .RequestContextFactory(new InMemoryRequestContextFactory())
                                               .Build())
                             .MessageMappers(messageMapperRegistry)
                             .DefaultChannelFactory(new ChannelFactory(messageConsumerFactory))
                             .Connections(new Connection[]
            {
                new Connection <CompetingConsumerCommand>(
                    new ConnectionName("paramore.example.multipleconsumer.command"),
                    new ChannelName("multipleconsumer.command"),
                    new RoutingKey("multipleconsumer.command"),
                    timeoutInMilliseconds: 200)
            }).Build();

            dispatcher.Receive();

            Console.WriteLine("Press Enter to stop receiving ...");
            Console.ReadLine();

            dispatcher.End().Wait();

            var count = container.Resolve <IAmACommandCounter>().Counter;


            Console.WriteLine($"There were {count} commands handled by this consumer");
            Console.WriteLine("Press Enter to exit ...");
            Console.ReadLine();
        }
示例#10
0
        public DocumentService()
        {
            log4net.Config.XmlConfigurator.Configure();


            var container = new TinyIoCContainer();

            var handlerFactory       = new TinyIocHandlerFactory(container);
            var messageMapperFactory = new TinyIoCMessageMapperFactory(container);

            container.Register <IHandleRequests <DocumentCreatedEvent>, DocumentCreatedEventHandler>();
            container.Register <IHandleRequests <DocumentUpdatedEvent>, DocumentUpdatedEventHandler>();
            container.Register <IHandleRequests <FolderCreatedEvent>, FolderCreatedEventHandler>();

            var subscriberRegistry = new SubscriberRegistry();

            subscriberRegistry.Register <DocumentCreatedEvent, DocumentCreatedEventHandler>();
            subscriberRegistry.Register <DocumentUpdatedEvent, DocumentUpdatedEventHandler>();
            subscriberRegistry.Register <FolderCreatedEvent, FolderCreatedEventHandler>();

            //create policies
            var retryPolicy = Policy
                              .Handle <Exception>()
                              .WaitAndRetry(new[]
            {
                TimeSpan.FromMilliseconds(5000),
                TimeSpan.FromMilliseconds(10000),
                TimeSpan.FromMilliseconds(10000)
            });

            var circuitBreakerPolicy = Policy
                                       .Handle <Exception>()
                                       .CircuitBreaker(1, TimeSpan.FromMilliseconds(500));

            var policyRegistry = new PolicyRegistry()
            {
                { CommandProcessor.RETRYPOLICY, retryPolicy },
                { CommandProcessor.CIRCUITBREAKER, circuitBreakerPolicy }
            };

            //create message mappers
            var messageMapperRegistry = new MessageMapperRegistry(messageMapperFactory)
            {
                { typeof(FolderCreatedEvent), typeof(FolderCreatedEventMessageMapper) },
                { typeof(DocumentCreatedEvent), typeof(DocumentCreatedEventMessageMapper) },
                { typeof(DocumentUpdatedEvent), typeof(DocumentUpdatedEventMessageMapper) }
            };

            var awsCredentials = new StoredProfileAWSCredentials();


            var sqsMessageConsumerFactory = new SqsMessageConsumerFactory(awsCredentials);
            var sqsMessageProducerFactory = new SqsMessageProducerFactory(awsCredentials);

            var connections = new List <Connection>
            {
                new Connection(
                    new ConnectionName("paramore.example.documentsandfolders.documentcreatedevent"),
                    new InputChannelFactory(sqsMessageConsumerFactory, sqsMessageProducerFactory),
                    typeof(DocumentCreatedEvent),
                    new ChannelName("https://sqs.eu-west-1.amazonaws.com/027649620536/DocumentCreatedEvent"),
                    "DocumentCreatedEvent",
                    timeoutInMilliseconds: 5000,
                    noOfPerformers: 10),
                new Connection(
                    new ConnectionName("paramore.example.documentsandfolders.documentupdatedevent"),
                    new InputChannelFactory(sqsMessageConsumerFactory, sqsMessageProducerFactory),
                    typeof(DocumentUpdatedEvent),
                    new ChannelName("https://sqs.eu-west-1.amazonaws.com/027649620536/DocumentUpdatedEvent"),
                    "DocumentUpdatedEvent",
                    timeoutInMilliseconds: 5000,
                    noOfPerformers: 10),
                new Connection(
                    new ConnectionName("paramore.example.documentsandfolders.foldercreateddevent"),
                    new InputChannelFactory(sqsMessageConsumerFactory, sqsMessageProducerFactory),
                    typeof(FolderCreatedEvent),
                    new ChannelName("https://sqs.eu-west-1.amazonaws.com/027649620536/FolderCreatedEvent"),
                    "FolderCreatedEvent",
                    timeoutInMilliseconds: 5000,
                    noOfPerformers: 10)
            };



            var builder = DispatchBuilder
                          .With()
                          .CommandProcessor(CommandProcessorBuilder.With()
                                            .Handlers(new HandlerConfiguration(subscriberRegistry, handlerFactory))
                                            .Policies(policyRegistry)
                                            .NoTaskQueues()
                                            .RequestContextFactory(new InMemoryRequestContextFactory())
                                            .Build()
                                            )
                          .MessageMappers(messageMapperRegistry)
                          .ChannelFactory(new InputChannelFactory(sqsMessageConsumerFactory, sqsMessageProducerFactory))
                          .Connections(connections);

            _dispatcher = builder.Build();
        }
示例#11
0
        public static void Main(string[] args)
        {
            Log.Logger = new LoggerConfiguration()
                         .WriteTo.LiterateConsole()
                         .CreateLogger();

            var container = new TinyIoCContainer();

            var handlerFactory       = new TinyIocHandlerFactory(container);
            var messageMapperFactory = new TinyIoCMessageMapperFactory(container);

            container.Register <IHandleRequests <GreetingEvent>, GreetingEventHandler>();

            var subscriberRegistry = new SubscriberRegistry();

            subscriberRegistry.Register <GreetingEvent, GreetingEventHandler>();

            //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 policyRegistry = new PolicyRegistry
            {
                { CommandProcessor.RETRYPOLICY, retryPolicy },
                { CommandProcessor.CIRCUITBREAKER, circuitBreakerPolicy }
            };

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

            //create the gateway
            var rmqConnnection = new RmqMessagingGatewayConnection
            {
                AmpqUri  = new AmqpUriSpecification(new Uri("amqp://*****:*****@localhost:5672/%2f")),
                Exchange = new Exchange("paramore.brighter.exchange"),
            };

            var rmqMessageConsumerFactory = new RmqMessageConsumerFactory(rmqConnnection);

            var dispatcher = DispatchBuilder.With()
                             .CommandProcessor(CommandProcessorBuilder.With()
                                               .Handlers(new HandlerConfiguration(subscriberRegistry, handlerFactory))
                                               .Policies(policyRegistry)
                                               .NoTaskQueues()
                                               .RequestContextFactory(new InMemoryRequestContextFactory())
                                               .Build())
                             .MessageMappers(messageMapperRegistry)
                             .DefaultChannelFactory(new InputChannelFactory(rmqMessageConsumerFactory))
                             .Connections(new Connection[]
            {
                new Connection <GreetingEvent>(
                    new ConnectionName("paramore.example.greeting"),
                    new ChannelName("greeting.event"),
                    new RoutingKey("greeting.event"),
                    timeoutInMilliseconds: 200,
                    isDurable: true,
                    highAvailability: true)
            }).Build();

            dispatcher.Receive();

            Console.WriteLine("Press Enter to stop ...");
            Console.ReadLine();

            dispatcher.End().Wait();
        }