/// <summary> /// Set message handlers for the given topic /// </summary> /// <typeparam name="T">Message type to be handled</typeparam> /// <param name="handler">Handler for the message type</param> /// <returns></returns> public IHaveFulfilledSubscriptionRequirements WithMessageHandler <T>(IHandler <T> handler) where T : Message { var thing = _subscriptionConfig.SubscriptionType == SubscriptionType.PointToPoint ? PointToPointHandler <T>() : TopicHandler <T>(); Bus.SerialisationRegister.AddSerialiser <T>(_serialisationFactory.GetSerialiser <T>()); Bus.AddMessageHandler(() => handler); var messageTypeName = typeof(T).Name.ToLower(); Log.Info(string.Format("Added a message handler - MessageName: {0}, QueueName: {1}, HandlerName: {2}", messageTypeName, _subscriptionConfig.QueueName, handler.GetType().Name)); return(thing); }
private IHaveFulfilledSubscriptionRequirements TopicHandler<T>(IHandler<T> handler) where T : Message { var messageTypeName = typeof(T).Name.ToLower(); ConfigureSqsSubscriptionViaTopic(messageTypeName); var queue = _amazonQueueCreator.EnsureTopicExistsWithQueueSubscribed(Bus.Config.Region, Bus.SerialisationRegister, _subscriptionConfig); CreateSubscriptionListener(queue, _subscriptionConfig.Topic); Log.Info(string.Format("Created SQS topic subscription - Topic: {0}, QueueName: {1}", _subscriptionConfig.Topic, _subscriptionConfig.QueueName)); Bus.SerialisationRegister.AddSerialiser<T>(_serialisationFactory.GetSerialiser<T>()); Bus.AddMessageHandler(handler); Log.Info(string.Format("Added a message handler - Topic: {0}, QueueName: {1}, HandlerName: {2}", _subscriptionConfig.Topic, _subscriptionConfig.QueueName, handler.GetType().Name)); return this; }
/// <summary> /// Set message handlers for the given topic /// </summary> /// <typeparam name="T">Message type to be handled</typeparam> /// <param name="handler">Handler for the message type</param> /// <returns></returns> public IHaveFulfilledSubscriptionRequirements WithMessageHandler <T>(IHandlerAsync <T> handler) where T : Message { // TODO - Subscription listeners should be just added once per queue, // and not for each message handler var thing = _subscriptionConfig.SubscriptionType == SubscriptionType.PointToPoint ? PointToPointHandler <T>() : TopicHandler <T>(); Bus.SerialisationRegister.AddSerialiser <T>(_serialisationFactory.GetSerialiser <T>()); foreach (var region in Bus.Config.Regions) { Bus.AddMessageHandler(region, _subscriptionConfig.QueueName, () => handler); } _log.LogInformation($"Added a message handler - MessageType: {typeof(T)}, QueueName: {_subscriptionConfig.QueueName}, HandlerType: {handler.GetType()}"); return(thing); }
/// <summary> /// Set message handlers for the given topic /// </summary> /// <typeparam name="T">Message type to be handled</typeparam> /// <param name="handler">Handler for the message type</param> /// <returns></returns> public IHaveFulfilledSubscriptionRequirements WithMessageHandler <T>(IHandler <T> handler) where T : Message { // TODO - Subscription listeners should be just added once per queue, // and not for each message handler var thing = _subscriptionConfig.SubscriptionType == SubscriptionType.PointToPoint ? PointToPointHandler <T>() : TopicHandler <T>(); Bus.SerialisationRegister.AddSerialiser <T>(_serialisationFactory.GetSerialiser <T>()); foreach (var region in Bus.Config.Regions) { Bus.AddMessageHandler(region, _subscriptionConfig.QueueName, () => handler); } var messageTypeName = GetMessageTypeName <T>(); Log.Info(string.Format("Added a message handler - MessageName: {0}, QueueName: {1}, HandlerName: {2}", messageTypeName, _subscriptionConfig.QueueName, handler.GetType().Name)); return(thing); }
/// <summary> /// Set message handlers for the given topic /// </summary> /// <typeparam name="T">Message type to be handled</typeparam> /// <param name="handler">Handler for the message type</param> /// <returns></returns> public IHaveFulfilledSubscriptionRequirements WithMessageHandler <T>(IHandler <T> handler) where T : Message { _subscriptionConfig.Topic = typeof(T).Name.ToLower(); var publishEndpointProvider = CreatePublisherEndpointProvider(_subscriptionConfig); _subscriptionConfig.PublishEndpoint = publishEndpointProvider.GetLocationName(); _subscriptionConfig.Validate(); var subscriptionEndpointProvider = CreateSubscriptiuonEndpointProvider(_subscriptionConfig); _subscriptionConfig.QueueName = subscriptionEndpointProvider.GetLocationName(); var queue = _amazonQueueCreator.VerifyOrCreateQueue(Bus.Config.Region, Bus.SerialisationRegister, _subscriptionConfig); var sqsSubscriptionListener = new SqsNotificationListener(queue, Bus.SerialisationRegister, Bus.Monitor, _subscriptionConfig.OnError, Bus.MessageLock); Bus.AddNotificationTopicSubscriber(_subscriptionConfig.Topic, sqsSubscriptionListener); if (_subscriptionConfig.MaxAllowedMessagesInFlight.HasValue) { sqsSubscriptionListener.WithMaximumConcurrentLimitOnMessagesInFlightOf(_subscriptionConfig.MaxAllowedMessagesInFlight.Value); } if (_subscriptionConfig.MessageProcessingStrategy != null) { sqsSubscriptionListener.WithMessageProcessingStrategy(_subscriptionConfig.MessageProcessingStrategy); } Log.Info(string.Format("Created SQS topic subscription - Topic: {0}, QueueName: {1}", _subscriptionConfig.Topic, _subscriptionConfig.QueueName)); _subscriptionConfigured = true; if (!_subscriptionConfigured) { ConfigureSubscriptionWith(conf => conf.ErrorQueueOptOut = _subscriptionConfig.ErrorQueueOptOut); } Bus.SerialisationRegister.AddSerialiser <T>(_serialisationFactory.GetSerialiser <T>()); Bus.AddMessageHandler(handler); Log.Info(string.Format("Added a message handler - Topic: {0}, MessageType: {1}, HandlerName: {2}", _subscriptionConfig.Topic, typeof(T).Name, handler.GetType().Name)); return(this); }