public SqsMessageConsumerRequeueTests() { _myCommand = new MyCommand { Value = "Test" }; _correlationId = Guid.NewGuid(); _replyTo = "http:\\queueUrl"; _contentType = "text\\plain"; _topicName = _myCommand.GetType().FullName.ToString().ToValidSNSTopicName(); _message = new Message( new MessageHeader(_myCommand.Id, _topicName, MessageType.MT_COMMAND, _correlationId, _replyTo, _contentType), new MessageBody(JsonConvert.SerializeObject(_myCommand)) ); //Must have credentials stored in the SDK Credentials store or shared credentials file if (new CredentialProfileStoreChain().TryGetAWSCredentials("default", out var credentials)) { var awsConnection = new AWSMessagingGatewayConnection(credentials, RegionEndpoint.EUWest1); _channelFactory = new InputChannelFactory(awsConnection, new SqsMessageConsumerFactory(awsConnection)); _channel = _channelFactory.CreateInputChannel(new Connection <MyCommand>()); _messageProducer = new SqsMessageProducer(awsConnection); } }
static void Main(string[] args) { Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .WriteTo.Console() .CreateLogger(); var container = new TinyIoCContainer(); container.Register <IHandleRequests <GreetingReply>, GreetingReplyHandler>(); container.Register <IAmAMessageMapper <GreetingReply>, GreetingReplyMessageMapper>(); container.Register <IAmAMessageMapper <GreetingRequest>, GreetingRequestMessageMapper>(); var messageMapperFactory = new TinyIoCMessageMapperFactory(container); var handerFactory = new TinyIocHandlerFactory(container); var subscriberRegistry = new SubscriberRegistry() { { typeof(GreetingReply), typeof(GreetingReplyHandler) } }; var messageMapperRegistry = new MessageMapperRegistry(messageMapperFactory) { { typeof(GreetingRequest), typeof(GreetingRequestMessageMapper) }, { typeof(GreetingReply), typeof(GreetingReplyMessageMapper) } }; var rmqConnnection = new RmqMessagingGatewayConnection { AmpqUri = new AmqpUriSpecification(new Uri("amqp://*****:*****@localhost:5672")), Exchange = new Exchange("paramore.brighter.exchange"), }; var producer = new RmqMessageProducer(rmqConnnection); var inputChannelFactory = new InputChannelFactory(new RmqMessageConsumerFactory(rmqConnnection)); var builder = CommandProcessorBuilder.With() .Handlers(new HandlerConfiguration(subscriberRegistry, handerFactory)) .DefaultPolicy() .RequestReplyQueues( new MessagingConfiguration( null, producer, messageMapperRegistry, responseChannelFactory: inputChannelFactory)) .RequestContextFactory(new InMemoryRequestContextFactory()); var commandProcessor = builder.Build(); Console.WriteLine("Requesting Salutation..."); //blocking call commandProcessor.Call <GreetingRequest, GreetingReply>(new GreetingRequest { Name = "Ian", Language = "en-gb" }, 2000); Console.WriteLine("Done..."); }
Dispatcher BuildDispatcher(HandlerConfig handlers) { var policy = BuildPolicy(); //create the gateway var rmqConnnection = new RmqMessagingGatewayConnection { AmpqUri = new AmqpUriSpecification(new Uri("amqp://*****:*****@localhost:5672/%2f")), Exchange = new Exchange("paramore.brighter.exchange"), }; //<!-- Events with mapper and handler overrides --> //<add connectionName="Task.ReminderSent" channelName="Task.ReminderSent" routingKey="Task.ReminderSent" dataType="Tasks.Ports.Events.TaskReminderSentEvent" noOfPerformers="1" timeOutInMilliseconds="200" /> //<!-- Generic Events --> //<add connectionName="Task.Added" channelName="Task.Added" routingKey="Task.Added" dataType="GenericListener.Ports.Events.GenericTaskAddedEvent" noOfPerformers="1" timeOutInMilliseconds="200" /> //<add connectionName="Task.Edited" channelName="Task.Edited" routingKey="Task.Edited" dataType="GenericListener.Ports.Events.GenericTaskEditedEvent" noOfPerformers="1" timeOutInMilliseconds="200" /> //<add connectionName="Task.Completed" channelName="Task.Completed" routingKey="Task.Completed" dataType="GenericListener.Ports.Events.GenericTaskCompletedEvent" noOfPerformers="1" timeOutInMilliseconds="200" /> var inputChannelFactory = new InputChannelFactory(new RmqMessageConsumerFactory(rmqConnnection), new RmqMessageProducerFactory(rmqConnnection)); var connections = new List <Connection> { // Events with mapper and handler overrides new Connection(new ConnectionName("Task.ReminderSent"), inputChannelFactory, typeof(Tasks.Ports.Events.TaskReminderSentEvent), new ChannelName("Task.ReminderSent"), "Task.ReminderSent", noOfPerformers: 1, timeoutInMilliseconds: 200), // Generic Events new Connection(new ConnectionName("Task.Added"), inputChannelFactory, typeof(GenericTaskAddedEvent), new ChannelName("Task.Added"), "Task.Added", noOfPerformers: 1, timeoutInMilliseconds: 200), new Connection(new ConnectionName("Task.Edited"), inputChannelFactory, typeof(GenericTaskEditedEvent), new ChannelName("Task.Edited"), "Task.Edited", noOfPerformers: 1, timeoutInMilliseconds: 200), new Connection(new ConnectionName("Task.Completed"), inputChannelFactory, typeof(GenericTaskCompletedEvent), new ChannelName("Task.Completed"), "Task.Completed", noOfPerformers: 1, timeoutInMilliseconds: 200), }; return(DispatchBuilder.With() .CommandProcessor(CommandProcessorBuilder.With() .Handlers(handlers.Handlers) .Policies(policy) .NoTaskQueues() .RequestContextFactory(new InMemoryRequestContextFactory()) .Build()) .MessageMappers(handlers.Mappers) .ChannelFactory(inputChannelFactory) //.ConnectionsFromConfiguration() .Connections(connections) .Build()); }
public SqsQueuePurgeTests() { MyCommand myCommand = new MyCommand { Value = "Test" }; _message = new Message( new MessageHeader(myCommand.Id, "MyCommand", MessageType.MT_COMMAND), new MessageBody(JsonConvert.SerializeObject(myCommand)) ); //Must have credentials stored in the SDK Credentials store or shared credentials file if (new CredentialProfileStoreChain().TryGetAWSCredentials("default", out var credentials)) { var awsConnection = new AWSMessagingGatewayConnection(credentials, RegionEndpoint.EUWest1); _channelFactory = new InputChannelFactory(awsConnection, new SqsMessageConsumerFactory(awsConnection)); _channel = _channelFactory.CreateInputChannel(new Connection <MyCommand>()); _messageProducer = new SqsMessageProducer(awsConnection); } }
public TaskMailerService() { log4net.Config.XmlConfigurator.Configure(); var container = new TinyIoCContainer(); container.Register <IAmAMessageMapper <TaskReminderCommand>, Tasks.Ports.TaskReminderCommandMessageMapper>(); container.Register <MailTaskReminderHandler, MailTaskReminderHandler>(); container.Register <IAmAMailGateway, MailGateway>(); container.Register <IAmAMailTranslator, MailTranslator>(); var handlerFactory = new TinyIocHandlerFactory(container); var messageMapperFactory = new TinyIoCMessageMapperFactory(container); var subscriberRegistry = new SubscriberRegistry(); subscriberRegistry.Register <TaskReminderCommand, MailTaskReminderHandler>(); //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 messageMapperRegistry = new MessageMapperRegistry(messageMapperFactory) { { typeof(TaskReminderCommand), typeof(Tasks.Ports.TaskReminderCommandMessageMapper) }, { typeof(TaskReminderSentEvent), typeof(TaskMailer.Ports.TaskReminderSentEventMapper) } }; var rmqConnnection = new RmqMessagingGatewayConnection { AmpqUri = new AmqpUriSpecification(new Uri("amqp://*****:*****@localhost:5672/%2f")), Exchange = new Exchange("paramore.brighter.exchange"), }; var commandProcessor = CommandProcessorBuilder.With() .Handlers(new HandlerConfiguration(subscriberRegistry, handlerFactory)) .Policies(policyRegistry) .TaskQueues(new MessagingConfiguration(new TemporaryMessageStore(), new RmqMessageProducer(rmqConnnection), messageMapperRegistry)) .RequestContextFactory(new InMemoryRequestContextFactory()) .Build(); container.Register <IAmACommandProcessor>(commandProcessor); var rmqMessageConsumerFactory = new RmqMessageConsumerFactory(rmqConnnection); var rmqMessageProducerFactory = new RmqMessageProducerFactory(rmqConnnection); var inputChannelFactory = new InputChannelFactory(new RmqMessageConsumerFactory(rmqConnnection), new RmqMessageProducerFactory(rmqConnnection)); var connections = new List <Connection> { // Events with mapper and handler overrides new Connection(new ConnectionName("Task.Reminder"), inputChannelFactory, typeof(TaskReminderCommand), new ChannelName("Task.Reminder"), "Task.Reminder", noOfPerformers: 1, timeoutInMilliseconds: 200), }; _dispatcher = DispatchBuilder.With() .CommandProcessor(commandProcessor) .MessageMappers(messageMapperRegistry) .ChannelFactory(new InputChannelFactory(rmqMessageConsumerFactory, rmqMessageProducerFactory)) .Connections(connections) .Build(); }
public static void Main() { Log.Logger = new LoggerConfiguration() .WriteTo.Console() .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) .ChannelFactory(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(); }