コード例 #1
0
        protected ProducerSettings GetProducerSettings(Type messageType)
        {
            if (!ProducerSettingsByMessageType.TryGetValue(messageType, out var producerSettings))
            {
                var baseMessageType = _messageTypeToBaseType.GetOrAdd(messageType, mt =>
                {
                    var baseType = mt;
                    do
                    {
                        baseType = mt.BaseType;
                    }while (baseType != null && baseType != typeof(object) && !ProducerSettingsByMessageType.ContainsKey(baseType));

                    if (baseType != null)
                    {
                        _logger.LogDebug("Found a base type of {0} that is configured in the bus: {1}", mt, baseType);
                    }
                    else
                    {
                        _logger.LogDebug("Did not find any base type of {0} that is configured in the bus", mt);
                    }

                    // Note: Nulls are also added to dictionary, so that we don't look them up using reflection next time (cached).
                    return(baseType);
                });

                if (baseMessageType == null)
                {
                    throw new PublishMessageBusException($"Message of type {messageType} was not registered as a supported publish message. Please check your MessageBus configuration and include this type.");
                }

                producerSettings = ProducerSettingsByMessageType[baseMessageType];
            }

            return(producerSettings);
        }
コード例 #2
0
        protected virtual async Task ProduceToTransport(Type messageType, object message, string name, byte[] payload, PathKind kind)
        {
            AssertActive();

            Log.DebugFormat(CultureInfo.InvariantCulture, "Producing message {0} of type {1} on {2} {3} with size {4}", message, messageType.Name, kind, name, payload.Length);

            var m = new Message(payload);

            if (ProducerSettingsByMessageType.TryGetValue(messageType, out var producerSettings))
            {
                try
                {
                    var messageModifier = producerSettings.GetMessageModifier();
                    messageModifier(message, m);
                }
                catch (Exception e)
                {
                    Log.WarnFormat(CultureInfo.InvariantCulture, "The configured message modifier failed for message type {0} and message {1}", e, messageType, message);
                }
            }

            if (kind == PathKind.Topic)
            {
                var topicProducer = _producerByTopic.GetOrAdd(name);
                await topicProducer.SendAsync(m).ConfigureAwait(false);
            }
            else
            {
                var queueProducer = _producerByQueue.GetOrAdd(name);
                await queueProducer.SendAsync(m).ConfigureAwait(false);
            }

            Log.DebugFormat(CultureInfo.InvariantCulture, "Delivered message {0} of type {1} on {2} {3}", message, messageType.Name, kind, name);
        }
コード例 #3
0
        protected ProducerSettings GetProducerSettings(Type messageType)
        {
            if (!ProducerSettingsByMessageType.TryGetValue(messageType, out var producerSettings))
            {
                throw new PublishMessageBusException($"Message of type {messageType} was not registered as a supported publish message. Please check your MessageBus configuration and include this type.");
            }

            return(producerSettings);
        }
コード例 #4
0
        protected virtual async Task ProduceToTransport(Type messageType, object message, string name, byte[] payload, PathKind kind)
        {
            if (messageType is null)
            {
                throw new ArgumentNullException(nameof(messageType));
            }
            if (payload is null)
            {
                throw new ArgumentNullException(nameof(payload));
            }

            AssertActive();

            _logger.LogDebug("Producing message {0} of type {1} on {2} {3} with size {4}", message, messageType.Name, kind, name, payload.Length);

            var m = new Message(payload);

            if (ProducerSettingsByMessageType.TryGetValue(messageType, out var producerSettings))
            {
                try
                {
                    var messageModifier = producerSettings.GetMessageModifier();
                    messageModifier(message, m);
                }
                catch (Exception e)
                {
                    _logger.LogWarning(e, "The configured message modifier failed for message type {0} and message {1}", messageType, message);
                }
            }

            if (kind == PathKind.Topic)
            {
                var topicProducer = _producerByTopic.GetOrAdd(name);
                await topicProducer.SendAsync(m).ConfigureAwait(false);
            }
            else
            {
                var queueProducer = _producerByQueue.GetOrAdd(name);
                await queueProducer.SendAsync(m).ConfigureAwait(false);
            }

            _logger.LogDebug("Delivered message {0} of type {1} on {2} {3}", message, messageType.Name, kind, name);
        }