protected AbstractRabbitMQConsumer(
            ConnectionFactory connectionFactory,
            RabbitMQConnection connectionConsumer,
            RabbitMQConnection connectionPublisher,
            string queueName,
            ISerializer serializer = null,
            ILogger logger         = null,
            IConsumerCountManager consumerCountManager       = null,
            IMessageRejectionHandler messageRejectionHandler = null,
            ushort prefetchCount = 1)
        {
            _connectionFactory  = connectionFactory;
            ConnectionConsumer  = connectionConsumer;
            ConnectionPublisher = connectionPublisher;

            QueueName               = queueName;
            Serializer              = serializer ?? new JsonSerializer();
            _logger                 = logger;
            ConsumerCountManager    = consumerCountManager ?? new ConsumerCountManager();
            MessageRejectionHandler =
                messageRejectionHandler ?? new MessageDeserializationRejectionHandler(connectionFactory);

            PrefetchCount = prefetchCount;

            _cancellationTokenSource = new CancellationTokenSource();
        }
        protected AbstractSimpleMessageProcessingWorker(IQueueClient queueClient, string queueName,
                                                        IConsumerCountManager consumerCountManager = null, IMessageRejectionHandler messageRejectionHandler = null)
        {
            QueueClient = queueClient;
            QueueName   = queueName;

            ConsumerCountManager    = consumerCountManager ?? new ConsumerCountManager();
            MessageRejectionHandler = messageRejectionHandler ?? new MessageDeserializationRejectionHandler(QueueClient);
        }
 public SimpleProcessingWorker(IQueueClient queueClient, string queueName,
                               Action <IEnumerable <T> > batchCallbackAction,
                               ushort batchSize, IConsumerCountManager consumerCountManager = null,
                               IMessageRejectionHandler messageRejectionHandler             = null, ILogger logger = null, ushort prefetchCount = 1)
     : base(queueClient, queueName, consumerCountManager, messageRejectionHandler, logger, prefetchCount)
 {
     _batchCallbackAction = batchCallbackAction;
     _batchSize           = batchSize;
 }
 public RabbitMQConsumerWorker(IConnection connection, string queueName,
                               IMessageProcessingWorker <T> messageProcessingWorker, IMessageRejectionHandler messageRejectionHandler,
                               ISerializer serializer, Func <bool> scaleCallbackFunc)
 {
     _model = connection.CreateModel();
     _model.BasicQos(0, 1, false);
     _subscription            = new Subscription(_model, queueName, false);
     _messageProcessingWorker = messageProcessingWorker;
     _messageRejectionHandler = messageRejectionHandler;
     _serializer         = serializer;
     _scaleCallbackFunc  = scaleCallbackFunc;
     CheckAliveFrequency = new TimeSpan(0, 0, 10);
 }
        public static async Task <SimpleProcessingWorker <T> > CreateAndStartAsync(IQueueClient queueClient,
                                                                                   string queueName,
                                                                                   Action <T, RabbitMQConsumerContext> callbackAction, CancellationToken cancellationToken,
                                                                                   IConsumerCountManager consumerCountManager       = null,
                                                                                   IMessageRejectionHandler messageRejectionHandler = null, ILogger logger = null, ushort prefetchCount = 1)
        {
            var instance = new SimpleProcessingWorker <T>(queueClient, queueName, callbackAction,
                                                          consumerCountManager, messageRejectionHandler, logger, prefetchCount);

            await instance.StartAsync(cancellationToken).ConfigureAwait(false);

            return(instance);
        }
 public RabbitMQBatchConsumerWorker(ILogger logger, RabbitMQConnection connection, string queueName, IModel model,
                                    IBatchProcessingWorker <T> batchProcessingWorker, IMessageRejectionHandler messageRejectionHandler,
                                    ISerializer serializer)
 {
     _logger = logger;
     _model  = model;
     _model.BasicQos(0, batchProcessingWorker.GetBatchSize(), false);
     _queueName               = queueName;
     _batchProcessingWorker   = batchProcessingWorker;
     _messageRejectionHandler = messageRejectionHandler;
     _serializer              = serializer;
     CheckAliveFrequency      = new TimeSpan(0, 0, 10);
 }
        public RabbitMQConsumer(RabbitMQConnectionPool connectionPool, string queueName,
                                IMessageProcessingWorker <T> messageProcessingWorker, ISerializer serializer = null, IErrorLogger errorLogger = null,
                                IConsumerCountManager consumerCountManager = null, IMessageRejectionHandler messageRejectionHandler           = null)
        {
            _connectionPool          = connectionPool;
            _queueName               = queueName;
            _serializer              = serializer ?? new JsonSerializer();
            _errorLogger             = errorLogger;
            _messageProcessingWorker = messageProcessingWorker;
            _consumerCountManager    = consumerCountManager ?? new ConsumerCountManager();
            _messageRejectionHandler = messageRejectionHandler ?? new MessageDeserializationRejectionHandler(connectionPool);

            _consumerWorkersCount    = 0;
            _cancellationTokenSource = new CancellationTokenSource();
        }
        protected AbstractSimpleProcessingWorker(IQueueClient queueClient, string queueName,
                                                 IConsumerCountManager consumerCountManager = null, IMessageRejectionHandler messageRejectionHandler = null,
                                                 ILogger logger = null, ushort prefetchCount = 1)
        {
            QueueClient = queueClient;
            QueueName   = queueName;

            ConsumerCountManager    = consumerCountManager ?? new ConsumerCountManager();
            MessageRejectionHandler =
                messageRejectionHandler ?? new MessageDeserializationRejectionHandler(QueueClient);

            Logger = logger;

            PrefetchCount = prefetchCount;
        }
 public RabbitMQConsumerWorker(ILogger logger, IQueueClient queueClient, IModel modelConsumer, IModel modelPublisher, string queueName,
                               IMessageProcessingWorker <T> messageProcessingWorker, IMessageRejectionHandler messageRejectionHandler,
                               ISerializer serializer, ushort prefetchCount = 1)
 {
     _logger                  = logger;
     _queueClient             = queueClient;
     _modelConsumer           = modelConsumer;
     _modelPublisher          = modelPublisher;
     _queueName               = queueName;
     _prefetchCount           = prefetchCount;
     _messageProcessingWorker = messageProcessingWorker;
     _messageRejectionHandler = messageRejectionHandler;
     _serializer              = serializer;
     CheckAliveFrequency      = new TimeSpan(0, 0, 10);
     SubscribeModelEvents();
 }
        public RabbitMQConsumerWorker(IConnection connection, string queueName, IMessageProcessingWorker messageProcessingWorker, IMessageRejectionHandler messageRejectionHandler, Func <int> scaleCallbackFunc, Type expectedType, CancellationToken parentToken)
        {
            Contract.Requires(connection != null, "connection is required");
            Contract.Requires(string.IsNullOrWhiteSpace(queueName) == false, "queueName is required");
            Contract.Requires(messageProcessingWorker != null, "messageProcessingWorker is required");
            Contract.Requires(scaleCallbackFunc != null, "scaleCallbackFunc is required");

            this._model = connection.CreateModel();
            this._model.BasicQos(0, 1, false);
            this._subscription            = new Subscription(this._model, queueName, false);
            this._messageProcessingWorker = messageProcessingWorker;
            this._messageRejectionHandler = messageRejectionHandler;
            this._cancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(parentToken);
            this._scaleCallbackFunc       = scaleCallbackFunc;
            this._expectedType            = expectedType;
            this.CheckAliveFrequency      = new TimeSpan(0, 0, 10);
        }
Exemple #11
0
 public RabbitMQConsumer(
     ILogger logger,
     IQueueClient queueClient,
     ConnectionFactory connectionFactory,
     RabbitMQConnection connectionConsumer,
     RabbitMQConnection connectionPublisher,
     string queueName,
     IMessageProcessingWorker <T> messageProcessingWorker,
     ISerializer serializer = null,
     IConsumerCountManager consumerCountManager       = null,
     IMessageRejectionHandler messageRejectionHandler = null,
     ushort prefetchCount = 1)
     : base(connectionFactory, connectionConsumer, connectionPublisher, queueName, serializer, logger, consumerCountManager, messageRejectionHandler, prefetchCount)
 {
     _queueClient             = queueClient;
     _logger                  = logger;
     _messageProcessingWorker = messageProcessingWorker;
 }
    public RabbitMQConsumerWorker(IConnection connection, string queueName, IMessageProcessingWorker messageProcessingWorker, IMessageRejectionHandler messageRejectionHandler, Func <int> scaleCallbackFunc, Type expectedType, CancellationToken parentToken)
    {
        Contract.Requires(connection != null, "connection is required");
        Contract.Requires(string.IsNullOrWhiteSpace(queueName) == false, "queueName is required");
        Contract.Requires(messageProcessingWorker != null, "messageProcessingWorker is required");
        Contract.Requires(scaleCallbackFunc != null, "scaleCallbackFunc is required");

        this.queueName = queueName;
        this.model     = connection.CreateModel();
        this.model.BasicQos(0, 1, false);
        this.consumer = new EventingBasicConsumer(this.model);
        this.messageProcessingWorker = messageProcessingWorker;
        this.messageRejectionHandler = messageRejectionHandler;
        this.cancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(parentToken);
        this.scaleCallbackFunc       = scaleCallbackFunc;
        this.expectedType            = expectedType;
        this.CheckAliveFrequency     = new TimeSpan(0, 0, 10);


        this.consumer.Received     += this.OnMessage;
        this.consumer.Registered   += this.Consumer_Registered;
        this.consumer.Shutdown     += this.Consumer_Shutdown;
        this.consumer.Unregistered += this.Consumer_Unregistered;
    }
 public AdvancedMessageProcessingWorker(IQueueClient queueClient, string queueName, Action <T> callbackAction,
                                        ExceptionHandlingStrategy exceptionHandlingStrategy = ExceptionHandlingStrategy.Requeue,
                                        int invokeRetryCount = 1, int invokeRetryWaitMilliseconds = 0,
                                        ConsumerCountManager consumerCountManager = null, IMessageRejectionHandler messageRejectionHandler = null)
     : base(queueClient, queueName, exceptionHandlingStrategy, invokeRetryCount, invokeRetryWaitMilliseconds,
            consumerCountManager, messageRejectionHandler)
 {
     _callbackAction = callbackAction;
 }
 public AdvancedAsyncMessageProcessingWorker(IQueueClient queueClient, string queueName,
                                             Func <T, CancellationToken, Task> callbackFunc, TimeSpan processingTimeout,
                                             ExceptionHandlingStrategy exceptionHandlingStrategy = ExceptionHandlingStrategy.Requeue,
                                             int invokeRetryCount = 1, int invokeRetryWaitMilliseconds = 0,
                                             ConsumerCountManager consumerCountManager = null, IMessageRejectionHandler messageRejectionHandler = null)
     : base(queueClient, queueName, exceptionHandlingStrategy, invokeRetryCount, invokeRetryWaitMilliseconds,
            consumerCountManager, messageRejectionHandler)
 {
     _callbackFunc      = callbackFunc;
     _processingTimeout = processingTimeout;
 }
Exemple #15
0
        public async static Task <SimpleAsyncMessageProcessingWorker <T> > CreateAndStartAsync(IQueueClient queueClient,
                                                                                               string queueName, Func <T, CancellationToken, Task> callbackFunc, TimeSpan processingTimeout,
                                                                                               CancellationToken cancellationToken, IConsumerCountManager consumerCountManager = null,
                                                                                               IMessageRejectionHandler messageRejectionHandler = null)
        {
            var instance = new SimpleAsyncMessageProcessingWorker <T>(queueClient, queueName, callbackFunc,
                                                                      processingTimeout, consumerCountManager, messageRejectionHandler);

            await instance.StartAsync(cancellationToken).ConfigureAwait(false);

            return(instance);
        }
Exemple #16
0
 public SimpleAsyncMessageProcessingWorker(IQueueClient queueClient, string queueName,
                                           Func <T, CancellationToken, Task> callbackFunc, TimeSpan processingTimeout,
                                           IConsumerCountManager consumerCountManager = null, IMessageRejectionHandler messageRejectionHandler = null)
     : base(queueClient, queueName, consumerCountManager, messageRejectionHandler)
 {
     _callbackFunc      = callbackFunc;
     _processingTimeout = processingTimeout;
 }
Exemple #17
0
 public IQueueConsumer GetConsumer <T>(string queueName, IConsumerCountManager consumerCountManager,
                                       IMessageProcessingWorker <T> messageProcessingWorker, IMessageRejectionHandler messageRejectionHandler)
     where T : class
 {
     return(new RabbitMQConsumer <T>(
                connectionPool: _connectionPool,
                queueName: queueName,
                serializer: _serializer,
                errorLogger: _errorLogger,
                messageProcessingWorker: messageProcessingWorker,
                consumerCountManager: consumerCountManager,
                messageRejectionHandler: messageRejectionHandler));
 }
Exemple #18
0
 public SimpleMessageProcessingWorker(IQueueClient queueClient, string queueName, Action <T> callbackAction,
                                      IConsumerCountManager consumerCountManager = null, IMessageRejectionHandler messageRejectionHandler = null)
     : base(queueClient, queueName, consumerCountManager, messageRejectionHandler)
 {
     CallbackAction = callbackAction;
 }
Exemple #19
0
 public IQueueConsumer GetConsumer(string queueName, IConsumerCountManager consumerCountManager, IMessageProcessingWorker messageProcessingWorker, Type expectedType, IMessageRejectionHandler messageRejectionHandler)
 {
     return(new RabbitMQConsumer(
                connectionPool: this.ConnectionPool,
                queueName: queueName,
                expectedType: expectedType,
                messageProcessingWorker: messageProcessingWorker,
                consumerCountManager: consumerCountManager,
                messageRejectionHandler: messageRejectionHandler));
 }
        public IQueueConsumer CreateBatchConsumer <T>(string queueName, IConsumerCountManager consumerCountManager,
                                                      IBatchProcessingWorker <T> batchProcessingWorker, IMessageRejectionHandler messageRejectionHandler)
            where T : class
        {
            RabbitMQConnection connectionConsumer = ConnectionPerQueue
                ? _rabbitMQConnectionManager.CreateConnection($"consumer: {queueName}")
                : _rabbitMQConnectionManager.ConnectionByName("consumer") ?? _rabbitMQConnectionManager.CreateConnection("consumer");

            var connectionPublisher = _rabbitMQConnectionManager.ConnectionByName("publisher");

            return(new RabbitMQBatchConsumer <T>(
                       connection: connectionConsumer,
                       connectionPublisher: connectionPublisher,
                       connectionFactory: _connectionFactory,
                       queueName: queueName,
                       serializer: _serializer,
                       logger: _logger,
                       batchProcessingWorker: batchProcessingWorker,
                       consumerCountManager: consumerCountManager,
                       messageRejectionHandler: messageRejectionHandler));
        }
        public IQueueConsumer CreateConsumer <T>(string queueName, IConsumerCountManager consumerCountManager,
                                                 IMessageProcessingWorker <T> messageProcessingWorker, IMessageRejectionHandler messageRejectionHandler,
                                                 ushort prefetchCount = 1)
            where T : class
        {
            RabbitMQConnection connectionConsumer = ConnectionPerQueue
                ? _rabbitMQConnectionManager.CreateConnection($"consumer: {queueName}")
                : _rabbitMQConnectionManager.ConnectionByName("consumer") ?? _rabbitMQConnectionManager.CreateConnection("consumer");

            var connectionPublisher = _rabbitMQConnectionManager.ConnectionByName("publisher");

            return(new RabbitMQConsumer <T>(
                       queueClient: this,
                       connectionConsumer: connectionConsumer,
                       connectionPublisher: connectionPublisher,
                       connectionFactory: _connectionFactory,
                       queueName: queueName,
                       serializer: _serializer,
                       logger: _logger,
                       messageProcessingWorker: messageProcessingWorker,
                       consumerCountManager: consumerCountManager,
                       messageRejectionHandler: messageRejectionHandler,
                       prefetchCount: prefetchCount));
        }
Exemple #22
0
 protected AbstractAdvancedMessageProcessingWorker(IQueueClient queueClient, string queueName,
                                                   ExceptionHandlingStrategy exceptionHandlingStrategy = ExceptionHandlingStrategy.Requeue,
                                                   int invokeRetryCount = 1, int invokeRetryWaitMilliseconds = 0,
                                                   ConsumerCountManager consumerCountManager = null, IMessageRejectionHandler messageRejectionHandler = null)
     : base(queueClient, queueName, consumerCountManager, messageRejectionHandler)
 {
     InvokeRetryCount            = invokeRetryCount;
     InvokeRetryWaitMilliseconds = invokeRetryWaitMilliseconds;
     ExceptionHandlingStrategy   = exceptionHandlingStrategy;
 }
 public RabbitMQBatchConsumer(ILogger logger, ConnectionFactory connectionFactory, RabbitMQConnection connection, RabbitMQConnection connectionPublisher, string queueName, IBatchProcessingWorker <T> batchProcessingWorker, ISerializer serializer = null, IConsumerCountManager consumerCountManager = null, IMessageRejectionHandler messageRejectionHandler = null)
     : base(connectionFactory, connection, connectionPublisher, queueName, serializer, logger, consumerCountManager, messageRejectionHandler)
 {
     _batchProcessingWorker = batchProcessingWorker;
     _logger = logger;
 }
 public SimpleAsyncProcessingWorker(IQueueClient queueClient, string queueName,
                                    Func <IEnumerable <T>, CancellationToken, Task> batchCallbackFunc, ushort batchSize,
                                    TimeSpan processingTimeout,
                                    IConsumerCountManager consumerCountManager = null, IMessageRejectionHandler messageRejectionHandler = null,
                                    ILogger logger = null, ushort prefetchCount = 1)
     : base(queueClient, queueName, consumerCountManager, messageRejectionHandler, logger, prefetchCount)
 {
     _batchCallbackFunc = batchCallbackFunc;
     _processingTimeout = processingTimeout;
     _batchSize         = batchSize;
 }
 public SimpleAsyncProcessingWorker(IQueueClient queueClient, string queueName,
                                    Func <T, RabbitMQConsumerContext, CancellationToken, Task> callbackFunc, TimeSpan processingTimeout,
                                    IConsumerCountManager consumerCountManager = null, IMessageRejectionHandler messageRejectionHandler = null,
                                    ILogger logger = null, ushort prefetchCount = 1)
     : base(queueClient, queueName, consumerCountManager, messageRejectionHandler, logger, prefetchCount)
 {
     _callbackFunc      = callbackFunc;
     _processingTimeout = processingTimeout;
 }
        public async static Task <AdvancedMessageProcessingWorker <T> > CreateAndStartAsync(IQueueClient queueClient,
                                                                                            string queueName, Action <T> callbackAction, CancellationToken cancellationToken,
                                                                                            ExceptionHandlingStrategy exceptionHandlingStrategy = ExceptionHandlingStrategy.Requeue,
                                                                                            int invokeRetryCount = 1, int invokeRetryWaitMilliseconds = 0,
                                                                                            ConsumerCountManager consumerCountManager = null, IMessageRejectionHandler messageRejectionHandler = null)
        {
            var instance = new AdvancedMessageProcessingWorker <T>(queueClient, queueName, callbackAction,
                                                                   exceptionHandlingStrategy, invokeRetryCount, invokeRetryWaitMilliseconds, consumerCountManager,
                                                                   messageRejectionHandler);

            await instance.StartAsync(cancellationToken).ConfigureAwait(false);

            return(instance);
        }
Exemple #27
0
        public RabbitMQConsumer(RabbitMQConnectionPool connectionPool, string queueName, Type expectedType, IMessageProcessingWorker messageProcessingWorker, ConsumerCountManager consumerCountManager, IMessageRejectionHandler messageRejectionHandler)
        {
            //Set using constructor parameters
            this.ConnectionPool          = connectionPool;
            this.QueueName               = queueName;
            this.ExpectedType            = expectedType;
            this.MessageProcessingWorker = messageProcessingWorker;
            this._consumerCountManager   = consumerCountManager;
            this.MessageRejectionHandler = messageRejectionHandler;

            //Set using default values
            this._consumerWorkersCount    = 0;
            this._cancellationTokenSource = new CancellationTokenSource();
            this._isStopped = true;
        }
Exemple #28
0
 public AdvancedAsyncProcessingWorker(IQueueClient queueClient, string queueName,
                                      Func <IEnumerable <T>, CancellationToken, Task> batchCallbackFunc, ushort batchSize,
                                      TimeSpan processingTimeout,
                                      ExceptionHandlingStrategy exceptionHandlingStrategy = ExceptionHandlingStrategy.Requeue,
                                      int invokeRetryCount = 1, int invokeRetryWaitMilliseconds = 0,
                                      IConsumerCountManager consumerCountManager = null, IMessageRejectionHandler messageRejectionHandler = null,
                                      ILogger logger = null, ushort prefetchCount = 1)
     : base(queueClient, queueName, exceptionHandlingStrategy, invokeRetryCount, invokeRetryWaitMilliseconds,
            consumerCountManager, messageRejectionHandler, logger, prefetchCount)
 {
     _batchCallbackFunc = batchCallbackFunc;
     _processingTimeout = processingTimeout;
     _batchSize         = batchSize;
 }
        public static async Task <SimpleAsyncProcessingWorker <T> > CreateAndStartAsync(IQueueClient queueClient,
                                                                                        string queueName,
                                                                                        Func <IEnumerable <T>, CancellationToken, Task> batchCallbackFunc, ushort batchSize,
                                                                                        TimeSpan processingTimeout, CancellationToken cancellationToken,
                                                                                        IConsumerCountManager consumerCountManager = null, IMessageRejectionHandler messageRejectionHandler = null,
                                                                                        ILogger logger = null, ushort prefetchCount = 1)
        {
            var instance = new SimpleAsyncProcessingWorker <T>(queueClient, queueName, batchCallbackFunc, batchSize,
                                                               processingTimeout,
                                                               consumerCountManager, messageRejectionHandler, logger, prefetchCount);

            await instance.StartAsync(cancellationToken).ConfigureAwait(false);

            return(instance);
        }
Exemple #30
0
        public static async Task <AdvancedAsyncProcessingWorker <T> > CreateAndStartAsync(IQueueClient queueClient,
                                                                                          string queueName, Func <T, RabbitMQConsumerContext, CancellationToken, Task> callbackFunc, TimeSpan processingTimeout,
                                                                                          CancellationToken cancellationToken,
                                                                                          ExceptionHandlingStrategy exceptionHandlingStrategy = ExceptionHandlingStrategy.Requeue,
                                                                                          int invokeRetryCount = 1, int invokeRetryWaitMilliseconds = 0,
                                                                                          IConsumerCountManager consumerCountManager = null, IMessageRejectionHandler messageRejectionHandler = null,
                                                                                          ILogger logger = null, ushort prefetchCount = 1)
        {
            var instance = new AdvancedAsyncProcessingWorker <T>(queueClient, queueName, callbackFunc,
                                                                 processingTimeout, exceptionHandlingStrategy, invokeRetryCount, invokeRetryWaitMilliseconds,
                                                                 consumerCountManager, messageRejectionHandler, logger, prefetchCount);

            await instance.StartAsync(cancellationToken).ConfigureAwait(false);

            return(instance);
        }