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); }
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); }
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); }
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); }