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