public StartConsumingStatus StartConsuming(IPersistentConnection connection, ICollection <Tuple <IQueue, Func <byte[], MessageProperties, MessageReceivedInfo, Task> > > queueConsumerPairs, IConsumerConfiguration configuration) { Preconditions.CheckNotNull(connection, nameof(connection)); Preconditions.CheckNotNull(queueConsumerPairs, nameof(queueConsumerPairs)); Preconditions.CheckNotNull(configuration, nameof(configuration)); IDictionary <string, object> arguments = new Dictionary <string, object> { { "x-priority", configuration.Priority }, { "x-cancel-on-ha-failover", configuration.CancelOnHaFailover || connectionConfiguration.CancelOnHaFailover } }; try { Model = connection.CreateModel(); Model.BasicQos(0, configuration.PrefetchCount, true); basicConsumers = new List <BasicConsumer>(); foreach (var p in queueConsumerPairs) { var queue = p.Item1; var onMessage = p.Item2; var consumerTag = conventions.ConsumerTagConvention(); try { var basicConsumers = new BasicConsumer(SingleBasicConsumerCancelled, consumerDispatcher, queue, eventBus, handlerRunner, onMessage, logger, Model); Model.BasicConsume( queue.Name, // queue false, // noAck consumerTag, // consumerTag true, configuration.IsExclusive, arguments, // arguments basicConsumers); // consumer this.basicConsumers.Add(basicConsumers); logger.InfoWrite("Declared Consumer. queue='{0}', consumer tag='{1}' prefetchcount={2} priority={3} x-cancel-on-ha-failover={4}", queue.Name, consumerTag, configuration.PrefetchCount, configuration.Priority, configuration.CancelOnHaFailover); } catch (Exception ex) { logger.ErrorWrite("Consume failed. queue='{0}', consumer tag='{1}', message='{2}'", queue.Name, consumerTag, ex.Message); return(StartConsumingStatus.Failed); } } } catch (Exception exception) { logger.ErrorWrite("Consume failed. queue='{0}', message='{1}'", string.Join(";", queueConsumerPairs.Select(x => x.Item1.Name)), exception.Message); return(StartConsumingStatus.Failed); } return(StartConsumingStatus.Succeed); }
public void StartConsuming( IPersistentConnection connection, IQueue queue, Func <byte[], MessageProperties, MessageReceivedInfo, Task> onMessage) { Preconditions.CheckNotNull(connection, "connection"); Preconditions.CheckNotNull(queue, "queue"); Preconditions.CheckNotNull(onMessage, "onMessage"); this.queue = queue; this.onMessage = onMessage; var consumerTag = conventions.ConsumerTagConvention(); try { Model = connection.CreateModel(); Model.BasicQos(0, connectionConfiguration.PrefetchCount, false); Model.BasicConsume( queue.Name, // queue false, // noAck consumerTag, // consumerTag this); // consumer logger.InfoWrite("Declared Consumer. queue='{0}', consumer tag='{1}' prefetchcount={2}", queue.Name, consumerTag, connectionConfiguration.PrefetchCount); } catch (Exception exception) { logger.InfoWrite("Consume failed. queue='{0}', consumer tag='{1}', message='{2}'", queue.Name, consumerTag, exception.Message); } }
public StartConsumingStatus StartConsuming( IPersistentConnection connection, IQueue queue, Func <byte[], MessageProperties, MessageReceivedInfo, Task> onMessage, IConsumerConfiguration configuration ) { Preconditions.CheckNotNull(connection, "connection"); Preconditions.CheckNotNull(queue, "queue"); Preconditions.CheckNotNull(onMessage, "onMessage"); Preconditions.CheckNotNull(configuration, "configuration"); this.queue = queue; this.onMessage = onMessage; this.configuration = configuration; var consumerTag = conventions.ConsumerTagConvention(); IDictionary <string, object> arguments = new Dictionary <string, object> { { "x-priority", configuration.Priority }, { "x-cancel-on-ha-failover", configuration.CancelOnHaFailover || connectionConfiguration.CancelOnHaFailover } }; try { Model = connection.CreateModel(); Model.BasicQos(0, configuration.PrefetchCount, false); Model.BasicConsume( queue.Name, // queue false, // noAck consumerTag, // consumerTag true, configuration.IsExclusive, arguments, // arguments this); // consumer logger.InfoWrite("Declared Consumer. queue='{0}', consumer tag='{1}' prefetchcount={2} priority={3} x-cancel-on-ha-failover={4}", queue.Name, consumerTag, configuration.PrefetchCount, configuration.Priority, configuration.CancelOnHaFailover); } catch (Exception exception) { logger.ErrorWrite("Consume failed. queue='{0}', consumer tag='{1}', message='{2}'", queue.Name, consumerTag, exception.Message); return(StartConsumingStatus.Failed); } return(StartConsumingStatus.Succeed); }
public StartConsumingStatus StartConsuming(IPersistentConnection connection, ICollection <Tuple <IQueue, Func <byte[], MessageProperties, MessageReceivedInfo, Task> > > queueConsumerPairs, IConsumerConfiguration configuration) { Preconditions.CheckNotNull(connection, nameof(connection)); Preconditions.CheckNotNull(queueConsumerPairs, nameof(queueConsumerPairs)); Preconditions.CheckNotNull(configuration, nameof(configuration)); IDictionary <string, object> arguments = new Dictionary <string, object> { { "x-priority", configuration.Priority } }; try { Model = connection.CreateModel(); Model.BasicQos(0, configuration.PrefetchCount, true); basicConsumers = new List <BasicConsumer>(); foreach (var p in queueConsumerPairs) { var queue = p.Item1; var onMessage = p.Item2; var consumerTag = conventions.ConsumerTagConvention(); try { var basicConsumer = new BasicConsumer(SingleBasicConsumerCancelled, consumerDispatcher, queue, eventBus, handlerRunner, onMessage, Model); Model.BasicConsume( queue.Name, // queue false, // noAck consumerTag, // consumerTag true, configuration.IsExclusive, arguments, // arguments basicConsumer // consumer ); basicConsumers.Add(basicConsumer); logger.InfoFormat( "Declared consumer with consumerTag {consumerTag} on queue={queue} and configuration {configuration}", queue.Name, consumerTag, configuration ); } catch (Exception exception) { logger.Error( exception, "Consume with consumerTag {consumerTag} on queue {queue} failed", queue.Name, consumerTag ); return(StartConsumingStatus.Failed); } } return(StartConsumingStatus.Succeed); } catch (Exception exception) { logger.Error( exception, "Consume on queue {queue} failed", string.Join(";", queueConsumerPairs.Select(x => x.Item1.Name)) ); return(StartConsumingStatus.Failed); } }
public virtual void Consume(IQueue queue, Func <Byte[], MessageProperties, MessageReceivedInfo, Task> onMessage) { Preconditions.CheckNotNull(queue, "queue"); Preconditions.CheckNotNull(onMessage, "onMessage"); if (disposed) { throw new EasyNetQException("This bus has been disposed"); } var newConsumerTag = conventions.ConsumerTagConvention(); var subscriptionAction = new SubscriptionAction(newConsumerTag, logger, queue.IsSingleUse, queue.IsExclusive); subscriptionAction.Action = (isNewConnection) => { // recreate channel if current channel is no longer open or connection was dropped and reconnected (to survive server restart) if (subscriptionAction.Channel == null || subscriptionAction.Channel.IsOpen == false || isNewConnection) { subscriptionAction.Channel = CreateChannel(queue); } var channel = subscriptionAction.Channel; channel.BasicQos(0, connectionConfiguration.PrefetchCount, false); var consumer = consumerFactory.CreateConsumer(subscriptionAction, channel, queue.IsSingleUse, (consumerTag, deliveryTag, redelivered, exchange, routingKey, properties, body) => { var messageRecievedInfo = new MessageReceivedInfo { ConsumerTag = consumerTag, DeliverTag = deliveryTag, Redelivered = redelivered, Exchange = exchange, RoutingKey = routingKey }; var messsageProperties = new MessageProperties(properties); return(onMessage(body, messsageProperties, messageRecievedInfo)); }); var cancelNotifications = consumer as IConsumerCancelNotifications; if (cancelNotifications != null) { cancelNotifications.BasicCancel += OnBasicCancel; } channel.BasicConsume( queue.Name, // queue NoAck, // noAck consumer.ConsumerTag, // consumerTag consumer); // consumer logger.DebugWrite("Declared Consumer. queue='{0}', consumer tag='{1}' prefetchcount={2}", queue.Name, consumer.ConsumerTag, connectionConfiguration.PrefetchCount); }; AddSubscriptionAction(subscriptionAction); }
/// <inheritdoc /> public StartConsumingStatus StartConsuming( IReadOnlyCollection <Tuple <IQueue, MessageHandler> > queueConsumerPairs, ConsumerConfiguration configuration ) { Preconditions.CheckNotNull(queueConsumerPairs, nameof(queueConsumerPairs)); Preconditions.CheckNotNull(configuration, nameof(configuration)); try { InitModel(configuration.PrefetchCount, true); basicConsumers = new List <BasicConsumer>(); foreach (var p in queueConsumerPairs) { var queue = p.Item1; var onMessage = p.Item2; var consumerTag = conventions.ConsumerTagConvention(); try { var basicConsumer = new BasicConsumer(SingleBasicConsumerCancelled, consumerDispatcher, queue, eventBus, handlerRunner, onMessage, Model); Model.BasicConsume( queue.Name, // queue false, // noAck consumerTag, // consumerTag true, configuration.IsExclusive, configuration.Arguments, // arguments basicConsumer // consumer ); basicConsumers.Add(basicConsumer); logger.InfoFormat( "Declared consumer with consumerTag {consumerTag} on queue={queue} and configuration {configuration}", queue.Name, consumerTag, configuration ); } catch (Exception exception) { logger.Error( exception, "Consume with consumerTag {consumerTag} on queue {queue} failed", queue.Name, consumerTag ); return(StartConsumingStatus.Failed); } } return(StartConsumingStatus.Succeed); } catch (Exception exception) { logger.Error( exception, "Consume on queue {queue} failed", string.Join(";", queueConsumerPairs.Select(x => x.Item1.Name)) ); return(StartConsumingStatus.Failed); } }