public MessagePublisher( IModel channel, string exchangeName, string correlationId, ICompositeFormatterResolver formatterResolver) { if (string.IsNullOrWhiteSpace(exchangeName)) { throw new ArgumentException("Should be not empty string", nameof(exchangeName)); } _channel = channel ?? throw new ArgumentNullException(nameof(channel)); _exchangeName = exchangeName; _correlationId = correlationId; _formatterResolver = formatterResolver ?? throw new ArgumentNullException(nameof(formatterResolver)); }
/// <summary> /// RabbitMq endpoint - represents RabbitMq connection and provides entry points /// to start listening for the messages and publish messages. /// </summary> public RabbitMqEndpoint( IServiceProvider serviceProvider, ILogFactory logFactory, Uri connectionString, string vhost = null) { _serviceProvider = serviceProvider ?? throw new ArgumentNullException(nameof(serviceProvider)); _logFactory = logFactory ?? throw new ArgumentNullException(nameof(logFactory)); _connectionString = connectionString ?? throw new ArgumentNullException(nameof(connectionString)); _vhost = vhost; _log = logFactory.CreateLog(this); _formatterResolver = new CompositeFormatterResolver(); _subscribers = new List <MessageSubscriber>(); _formatterResolver.RegisterResolvers(MoneyResolver.Instance); }
public MessageProcessor( TimeSpan defaultRetryTimeout, ICompositeFormatterResolver formatterResolver, IInternalMessageQueue internalQueue, ILogFactory logFactory, Func <string, IMessagePublisher> repliesPublisher, IRejectManager rejectManager, IRetryManager retryManager, IServiceProvider serviceProvider, IMessageSubscriptionsRegistry subscriptionsRegistry) : base(logFactory) { _defaultRetryTimeout = defaultRetryTimeout; _formatterResolver = formatterResolver; _internalQueue = internalQueue; _log = logFactory.CreateLog(this); _logFactory = logFactory; _repliesPublisher = repliesPublisher; _rejectManager = rejectManager; _retryManager = retryManager; _serviceProvider = serviceProvider; _subscriptionsRegistry = subscriptionsRegistry; _id = Interlocked.Increment(ref _instanceCounter); }
public static MessageSubscriber Create(IServiceProvider serviceProvider, IMessageSubscriptionsRegistry subscriptionsRegistry, IConnection connection, ILogFactory logFactory, ICompositeFormatterResolver formatterResolver, Func <string, IMessagePublisher> repliesPublisher, string exchangeName, string queueName, TimeSpan defaultFirstLevelRetryTimeout, TimeSpan maxFirstLevelRetryMessageAge, int maxFirstLevelRetryCount, int firstLevelRetryQueueCapacity, int processingQueueCapacity, int messageConsumersCount, int messageProcessorsCount) { var log = logFactory.CreateLog(typeof(MessageSubscriber)); log.Info("Creating RabbitMq subscriber...", new { exchangeName, queueName, defaultFirstLevelRetryTimeout, maxFirstLevelRetryMessageAge, maxFirstLevelRetryCount, firstLevelRetryQueueCapacity, processingQueueCapacity, messageConsumersCount, messageProcessorsCount }); var internalQueue = new InternalMessageQueue(processingQueueCapacity); var rejectManager = new RejectManager(logFactory); var retryManager = new RetryManager ( logFactory, maxFirstLevelRetryMessageAge, maxFirstLevelRetryCount, firstLevelRetryQueueCapacity, internalQueue ); var messageConsumers = new List <IMessageConsumer>(messageConsumersCount); for (var i = 0; i < messageConsumersCount; i++) { messageConsumers.Add(new MessageConsumer ( connection, internalQueue, logFactory, queueName )); } var messageProcessors = new List <IMessageProcessor>(messageConsumersCount); for (var i = 0; i < messageProcessorsCount; i++) { messageProcessors.Add(new MessageProcessor ( defaultFirstLevelRetryTimeout, formatterResolver, internalQueue, logFactory, repliesPublisher, rejectManager, retryManager, serviceProvider, subscriptionsRegistry )); } using (var channel = connection.CreateModel()) { channel.BasicQos(0, 100, false); channel.QueueDeclare(queueName, true, false, false, null); log.Info($"Start receiving messages from the exchange {exchangeName} via the queue {queueName}:"); foreach (var subscription in subscriptionsRegistry.GetAllSubscriptions()) { log.Info($"Binding message {subscription.RoutingKey}..."); channel.QueueBind(queueName, exchangeName, subscription.RoutingKey, null); } } return(new MessageSubscriber ( messageConsumers, messageProcessors, rejectManager, retryManager )); }