Beispiel #1
0
        private static IBasicProperties BuildProperties(IDictionary <string, object> headers, IChannelHost channelHost, byte?priority = 0, byte?deliveryMode = 2)
        {
            var props = channelHost.GetChannel().CreateBasicProperties();

            props.DeliveryMode = deliveryMode ?? 2; // Default Persisted
            props.Priority     = priority ?? 0;     // Default Priority

            if (!props.IsHeadersPresent())
            {
                props.Headers = new Dictionary <string, object>();
            }

            if (headers?.Count > 0)
            {
                foreach (var kvp in headers)
                {
                    if (kvp.Key.StartsWith(Utils.Constants.HeaderPrefix, StringComparison.OrdinalIgnoreCase))
                    {
                        props.Headers[kvp.Key] = kvp.Value;
                    }
                }
            }

            // Non-optional Header.
            props.Headers[Utils.Constants.HeaderForObjectType] = Utils.Constants.HeaderValueForMessage;

            return(props);
        }
Beispiel #2
0
        private static IBasicProperties BuildProperties(Letter letter, IChannelHost channelHost, bool withHeaders)
        {
            var props = channelHost.GetChannel().CreateBasicProperties();

            props.DeliveryMode = letter.Envelope.RoutingOptions.DeliveryMode;
            props.ContentType  = letter.Envelope.RoutingOptions.MessageType;
            props.Priority     = letter.Envelope.RoutingOptions.PriorityLevel;

            if (!props.IsHeadersPresent())
            {
                props.Headers = new Dictionary <string, object>();
            }

            if (withHeaders && letter.LetterMetadata != null)
            {
                foreach (var kvp in letter.LetterMetadata?.CustomFields)
                {
                    if (kvp.Key.StartsWith(Utils.Constants.HeaderPrefix, StringComparison.OrdinalIgnoreCase))
                    {
                        props.Headers[kvp.Key] = kvp.Value;
                    }
                }
            }

            // Non-optional Header.
            props.Headers[Utils.Constants.HeaderForObjectType] = Utils.Constants.HeaderValueForLetter;

            return(props);
        }
        public static IBasicProperties CreateBasicProperties(
            this IMessage message,
            IChannelHost channelHost,
            bool withOptionalHeaders,
            IMetadata metadata)
        {
            var props = channelHost.GetChannel().CreateBasicProperties();

            props.DeliveryMode = message.Envelope.RoutingOptions.DeliveryMode;
            props.ContentType  = message.Envelope.RoutingOptions.MessageType;
            props.Priority     = message.Envelope.RoutingOptions.PriorityLevel;
            props.MessageId    = message.MessageId ?? Guid.NewGuid().ToString();

            if (!props.IsHeadersPresent())
            {
                props.Headers = new Dictionary <string, object>();
            }

            if (withOptionalHeaders && metadata != null)
            {
                foreach (var kvp in metadata?.CustomFields)
                {
                    if (kvp.Key.StartsWith(Constants.HeaderPrefix, StringComparison.OrdinalIgnoreCase))
                    {
                        props.Headers[kvp.Key] = kvp.Value;
                    }
                }
            }

            return(props);
        }
Beispiel #4
0
        private async Task <bool> StartConsumingAsync()
        {
            if (_shutdown)
            {
                return(false);
            }

            _logger.LogInformation(
                LogMessages.Consumers.StartingConsumer,
                ConsumerOptions.ConsumerName);

            if (Options.FactoryOptions.EnableDispatchConsumersAsync)
            {
                if (_asyncConsumer != null)
                {
                    _asyncConsumer.Received -= ReceiveHandlerAsync;
                    _asyncConsumer.Shutdown -= ConsumerShutdownAsync;
                }

                try
                {
                    _asyncConsumer = CreateAsyncConsumer();
                    if (_asyncConsumer == null)
                    {
                        return(false);
                    }

                    _chanHost
                    .GetChannel()
                    .BasicConsume(
                        ConsumerOptions.QueueName,
                        ConsumerOptions.AutoAck ?? false,
                        ConsumerOptions.ConsumerName,
                        ConsumerOptions.NoLocal ?? false,
                        ConsumerOptions.Exclusive ?? false,
                        null,
                        _asyncConsumer);
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex, "Exception creating internal RabbitMQ consumer. Retrying...");
                    await Task.Delay(1000).ConfigureAwait(false);

                    await _chanHost.MakeChannelAsync().ConfigureAwait(false);

                    return(false);
                }
            }
            else
            {
                if (_consumer != null)
                {
                    _consumer.Received -= ReceiveHandler;
                    _consumer.Shutdown -= ConsumerShutdown;
                }

                try
                {
                    _consumer = CreateConsumer();
                    if (_consumer == null)
                    {
                        return(false);
                    }

                    _chanHost
                    .GetChannel()
                    .BasicConsume(
                        ConsumerOptions.QueueName,
                        ConsumerOptions.AutoAck ?? false,
                        ConsumerOptions.ConsumerName,
                        ConsumerOptions.NoLocal ?? false,
                        ConsumerOptions.Exclusive ?? false,
                        null,
                        _consumer);
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex, "Exception creating internal RabbitMQ consumer. Retrying...");
                    await Task.Delay(1000).ConfigureAwait(false);

                    await _chanHost.MakeChannelAsync().ConfigureAwait(false);

                    return(false);
                }
            }

            _logger.LogInformation(
                LogMessages.Consumers.StartedConsumer,
                ConsumerOptions.ConsumerName);

            return(true);
        }
Beispiel #5
0
        private bool StartConsuming()
        {
            if (_shutdown)
            {
                return(false);
            }

            _logger.LogInformation(
                LogMessages.Consumers.StartingConsumer,
                ConsumerOptions.ConsumerName);

            if (Options.FactoryOptions.EnableDispatchConsumersAsync)
            {
                if (_asyncConsumer != null)
                {
                    _asyncConsumer.Received -= ReceiveHandlerAsync;
                    _asyncConsumer.Shutdown -= ConsumerShutdownAsync;
                }

                _asyncConsumer = CreateAsyncConsumer();
                if (_asyncConsumer == null)
                {
                    return(false);
                }

                _chanHost
                .GetChannel()
                .BasicConsume(
                    ConsumerOptions.QueueName,
                    ConsumerOptions.AutoAck ?? false,
                    ConsumerOptions.ConsumerName,
                    ConsumerOptions.NoLocal ?? false,
                    ConsumerOptions.Exclusive ?? false,
                    null,
                    _asyncConsumer);
            }
            else
            {
                if (_asyncConsumer != null)
                {
                    _consumer.Received -= ReceiveHandler;
                    _consumer.Shutdown -= ConsumerShutdown;
                }

                _consumer = CreateConsumer();
                if (_consumer == null)
                {
                    return(false);
                }

                _chanHost
                .GetChannel()
                .BasicConsume(
                    ConsumerOptions.QueueName,
                    ConsumerOptions.AutoAck ?? false,
                    ConsumerOptions.ConsumerName,
                    ConsumerOptions.NoLocal ?? false,
                    ConsumerOptions.Exclusive ?? false,
                    null,
                    _consumer);
            }

            _logger.LogInformation(
                LogMessages.Consumers.StartedConsumer,
                ConsumerOptions.ConsumerName);

            return(true);
        }