Esempio n. 1
0
        static void Main()
        {
            var container = new TinyIoCContainer();


            var messageMapperFactory = new TinyIoCMessageMapperFactory(container);

            var messageMapperRegistry = new MessageMapperRegistry(messageMapperFactory)
            {
                { typeof(GreetingEvent), typeof(GreetingEventMessageMapper) }
            };

            var messageStore = new InMemoryMessageStore();

            var messagingConfiguration = new MsSqlMessagingGatewayConfiguration(@"Database=BrighterSqlQueue;Server=.\sqlexpress;Integrated Security=SSPI;", "QueueData");
            var producer = new MsSqlMessageProducer(messagingConfiguration);

            var builder = CommandProcessorBuilder.With()
                          .Handlers(new HandlerConfiguration())
                          .DefaultPolicy()
                          .TaskQueues(new MessagingConfiguration((IAmAMessageStore <Message>)messageStore, producer, messageMapperRegistry))
                          .RequestContextFactory(new InMemoryRequestContextFactory());

            var commandProcessor = builder.Build();

            commandProcessor.Post(new GreetingEvent("Ian"));
        }
        static void Main(string[] args)
        {
            Log.Logger = new LoggerConfiguration()
                         .MinimumLevel.Debug()
                         .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
                         .Enrich.FromLogContext()
                         .WriteTo.Console()
                         .CreateLogger();

            var serviceCollection = new ServiceCollection();

            var messageStore      = new InMemoryMessageStore();
            var gatewayConnection = new RmqMessagingGatewayConnection
            {
                AmpqUri  = new AmqpUriSpecification(new Uri("amqp://*****:*****@localhost:5672")),
                Exchange = new Exchange("paramore.brighter.exchange"),
            };
            var producer = new RmqMessageProducer(gatewayConnection);

            serviceCollection
            .AddBrighter(options =>
                         options.BrighterMessaging = new BrighterMessaging(messageStore, producer))
            .AutoFromAssemblies();

            var serviceProvider = serviceCollection.BuildServiceProvider();

            var commandProcessor = serviceProvider.GetService <IAmACommandProcessor>();

            for (int i = 0; i < 1000; i++)
            {
                commandProcessor.Post(new GreetingEvent("Ian"));
            }
        }
Esempio n. 3
0
        static void Main(string[] args)
        {
            var container = new TinyIoCContainer();

            var messageMapperFactory = new TinyIoCMessageMapperFactory(container);

            var messageMapperRegistry = new MessageMapperRegistry(messageMapperFactory)
            {
                { typeof(GreetingEvent), typeof(GreetingEventMessageMapper) }
            };

            var messageStore    = new InMemoryMessageStore();
            var redisConnection = new RedisMessagingGatewayConfiguration
            {
                RedisConnectionString = "localhost:6379?connectTimeout=1&sendTImeout=1000&",
                MaxPoolSize           = 10,
                MessageTimeToLive     = TimeSpan.FromMinutes(10)
            };

            var producer = new RedisMessageProducer(redisConnection);

            var builder = CommandProcessorBuilder.With()
                          .Handlers(new HandlerConfiguration())
                          .DefaultPolicy()
                          .TaskQueues(new MessagingConfiguration(messageStore, producer, messageMapperRegistry))
                          .RequestContextFactory(new InMemoryRequestContextFactory());

            var commandProcessor = builder.Build();

            commandProcessor.Post(new GreetingEvent("Ian"));
        }
Esempio n. 4
0
        public void Establish()
        {
            _myCommand.Value = "Hello World";

            _messageStore        = new InMemoryMessageStore();
            _fakeMessageProducer = new FakeMessageProducer();

            _message = new Message(
                header: new MessageHeader(messageId: _myCommand.Id, topic: "MyCommand", messageType: MessageType.MT_COMMAND),
                body: new MessageBody(JsonConvert.SerializeObject(_myCommand))
                );

            var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(() => new MyCommandMessageMapper()));

            messageMapperRegistry.Register <MyCommand, MyCommandMessageMapper>();

            var retryPolicy = Policy
                              .Handle <Exception>()
                              .RetryAsync();

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

            _commandProcessor = new CommandProcessor(
                new InMemoryRequestContextFactory(),
                new PolicyRegistry()
            {
                { CommandProcessor.RETRYPOLICYASYNC, retryPolicy }, { CommandProcessor.CIRCUITBREAKERASYNC, circuitBreakerPolicy }
            },
                messageMapperRegistry,
                (IAmAMessageStoreAsync <Message>)_messageStore,
                (IAmAMessageProducerAsync)_fakeMessageProducer);
        }
        public void StoredMessagesCanBeRetrieved()
        {
            var topic        = "askldjfdg";
            var topic2       = "askldjfasdasdg";
            var message1     = new object();
            var message2     = new object();
            var message3     = new object();
            var header1      = new Dictionary <string, byte[]>();
            var header2      = new Dictionary <string, byte[]>();
            var header3      = new Dictionary <string, byte[]>();
            var messageStore = new InMemoryMessageStore();

            var index1 = messageStore.AddMessage(topic, null, header1, message1);
            var index2 = messageStore.AddMessage(topic2, null, header2, message2);
            var index3 = messageStore.AddMessage(topic, null, header3, message3);

            index1.Should().Be(0);
            index2.Should().Be(0);
            index3.Should().Be(1);

            messageStore.GetMessage(topic, 0).Should().Be(message1);
            messageStore.GetMessage(topic2, 0).Should().Be(message2);
            messageStore.GetMessage(topic, 1).Should().Be(message3);

            messageStore.GetMessageHeader(topic, 0).Should().BeSameAs(header1);
            messageStore.GetMessageHeader(topic2, 0).Should().BeSameAs(header2);
            messageStore.GetMessageHeader(topic, 1).Should().BeSameAs(header3);

            messageStore.GetMessageKey(topic, 0).Should().BeNull();
            messageStore.GetMessageKey(topic2, 0).Should().BeNull();
            messageStore.GetMessageKey(topic, 1).Should().BeNull();
        }
Esempio n. 6
0
        private static CommandProcessor BuildCommandProcessor()
        {
            var messageStore = new InMemoryMessageStore();

            var container             = new UnityContainer();
            var messageMapperFactory  = new UnityMessageMapperFactory(container);
            var messageMapperRegistry = new MessageMapperRegistry(messageMapperFactory)
            {
                { typeof(GreetingEvent), typeof(GreetingEventMessageMapper) }
            };

            var connectionString = @"Database=BrighterSqlQueue;Server=localhost;Integrated Security=SSPI;";
            var gatewayConfig    = new MsSqlMessagingGatewayConfiguration(connectionString, "QueueData");
            var producer         = new MsSqlMessageProducer(gatewayConfig);

            var builder = CommandProcessorBuilder.With()
                          .Handlers(new HandlerConfiguration())
                          .DefaultPolicy()
                          .TaskQueues(new MessagingConfiguration((IAmAMessageStore <Message>)messageStore, producer,
                                                                 messageMapperRegistry))
                          .RequestContextFactory(new InMemoryRequestContextFactory());

            var commandProcessor = builder.Build();

            return(commandProcessor);
        }
Esempio n. 7
0
        private static void Main(string[] args)
        {
            if (args.Length != 1)
            {
                Console.WriteLine("usage: MultipleSender <count>");
                Console.WriteLine("eg   : MultipleSender 500");
                return;
            }

            if (!int.TryParse(args[0], out int repeatCount))
            {
                Console.WriteLine($"{args[0]} is not a valid number");
                return;
            }

            var container = new TinyIoCContainer();

            var messageMapperFactory = new TinyIoCMessageMapperFactory(container);

            var messageMapperRegistry = new MessageMapperRegistry(messageMapperFactory)
            {
                { typeof(CompetingConsumerCommand), typeof(CompetingConsumerCommandMessageMapper) }
            };

            var messageStore = new InMemoryMessageStore();

            var messagingConfiguration =
                new MsSqlMessagingGatewayConfiguration(
                    @"Database=BrighterSqlQueue;Server=.\sqlexpress;Integrated Security=SSPI;", "QueueData");
            var producer = new MsSqlMessageProducer(messagingConfiguration);

            var builder = CommandProcessorBuilder.With()
                          .Handlers(new HandlerConfiguration())
                          .DefaultPolicy()
                          .TaskQueues(new MessagingConfiguration((IAmAMessageStore <Message>)messageStore, producer, messageMapperRegistry))
                          .RequestContextFactory(new InMemoryRequestContextFactory());

            var commandProcessor = builder.Build();

            using (new TransactionScope(TransactionScopeOption.RequiresNew,
                                        new TransactionOptions {
                IsolationLevel = IsolationLevel.ReadCommitted
            },
                                        TransactionScopeAsyncFlowOption.Enabled))
            {
                Console.WriteLine($"Sending {repeatCount} command messages");
                var sequenceNumber = 1;
                for (int i = 0; i < repeatCount; i++)
                {
                    commandProcessor.Post(new CompetingConsumerCommand(sequenceNumber++));
                }
                // We do NOT complete the transaction here to show that a message is
                // always queued, whether the transaction commits or aborts!
            }
        }
Esempio n. 8
0
        static void Main(string[] args)
        {
            var kafkaMessagingGatewayConfiguration
                = new KafkaMessagingGatewayConfiguration()
                {
                Name             = "paramore.brighter.greetingsender",
                BootStrapServers = new[] { "localhost:9092" }
                };

            for (var i = 0; i < args.Length; i += 2)
            {
                var key = args[i];
                var val = default(string);
                if (i + 1 < args.Length)
                {
                    val = args[i + 1];
                }

                switch (key)
                {
                case "--bootstrap-server":
                    kafkaMessagingGatewayConfiguration.BootStrapServers = new[] { val };
                    break;

                default:
                    break;
                }
            }

            var container             = new TinyIoCContainer();
            var messageMapperFactory  = new TinyIoCMessageMapperFactory(container);
            var messageMapperRegistry = new MessageMapperRegistry(messageMapperFactory)
            {
                { typeof(GreetingEvent), typeof(GreetingEventMessageMapper) }
            };

            var messageStore = new InMemoryMessageStore();
            var producer     = new KafkaMessageProducerFactory(kafkaMessagingGatewayConfiguration)
                               .Create();

            var builder = CommandProcessorBuilder.With()
                          .Handlers(new HandlerConfiguration())
                          .DefaultPolicy()
                          .TaskQueues(new MessagingConfiguration(messageStore, producer, messageMapperRegistry))
                          .RequestContextFactory(new InMemoryRequestContextFactory());

            var commandProcessor = builder.Build();

            commandProcessor.Post(new GreetingEvent("Wayne"));
        }
        public async Task MessagesInStoreAreReceived()
        {
            var topic    = "askldjfdg";
            var message1 = new object();
            var message2 = new object();
            var message3 = new object();
            var header1  = new object();
            var header2  = new object();
            var header3  = new object();
            var key1     = new object();
            var key2     = new object();
            var key3     = new object();

            var headerList  = new List <object>();
            var messageList = new List <object>();
            var keyList     = new List <object>();

            var messageStore    = new InMemoryMessageStore();
            var messageListener = new InMemoryMessageListener(messageStore);

            messageStore.AddMessage(topic, key1, header1, message1);
            messageStore.AddMessage(topic, key2, header2, message2);
            messageStore.AddMessage(topic, key3, header3, message3);

            await messageListener.StartAsync(
                new[] { topic },
                async (k, h, m) =>
            {
                keyList.Add(k);
                headerList.Add(h);
                messageList.Add(m);
            },
                new CancellationTokenSource(100).Token);

            headerList.Should().ContainInOrder(header1, header2, header3);
            messageList.Should().ContainInOrder(message1, message2, message3);
            keyList.Should().ContainInOrder(key1, key2, key3);
        }
Esempio n. 10
0
        static void Main(string[] args)
        {
            Log.Logger = new LoggerConfiguration()
                         .MinimumLevel.Debug()
                         .WriteTo.LiterateConsole()
                         .CreateLogger();

            var container = new TinyIoCContainer();

            container.Register <IHandleRequests <GreetingRequest>, GreetingRequestHandler>();
            container.Register <IAmAMessageMapper <GreetingRequest>, GreetingRequestMessageMapper>();
            container.Register <IAmAMessageMapper <GreetingReply>, GreetingReplyMessageMapper>();

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

            var subscriberRegistry = new SubscriberRegistry();

            subscriberRegistry.Register <GreetingRequest, GreetingRequestHandler>();

            //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 }
            };

            var messageStore = new InMemoryMessageStore();

            //create message mappers
            var messageMapperRegistry = new MessageMapperRegistry(messageMapperFactory)
            {
                { typeof(GreetingRequest), typeof(GreetingRequestMessageMapper) },
                { typeof(GreetingReply), typeof(GreetingReplyMessageMapper) }
            };

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

            var producer = new RmqMessageProducer(rmqConnnection);

            var rmqMessageConsumerFactory = new RmqMessageConsumerFactory(rmqConnnection);

            var commandProcessor = CommandProcessorBuilder.With()
                                   .Handlers(new HandlerConfiguration(subscriberRegistry, handlerFactory))
                                   .Policies(policyRegistry)
                                   .TaskQueues(new MessagingConfiguration(messageStore, producer, messageMapperRegistry))
                                   .RequestContextFactory(new InMemoryRequestContextFactory())
                                   .Build();

            container.Register <IAmACommandProcessor>(commandProcessor);

            var dispatcher = DispatchBuilder.With()
                             .CommandProcessor(commandProcessor)
                             .MessageMappers(messageMapperRegistry)
                             .DefaultChannelFactory(new InputChannelFactory(rmqMessageConsumerFactory))
                             .Connections(new Connection[]
            {
                new Connection <GreetingRequest>(
                    new ConnectionName("paramore.example.greeting"),
                    new ChannelName("Greeting.Request"),
                    new RoutingKey("Greeting.Request"),
                    timeoutInMilliseconds: 200,
                    isDurable: true,
                    highAvailability: true)
            }).Build();

            dispatcher.Receive();

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

            dispatcher.End().Wait();
        }