public Task PublishAsync <T>(T message, string messageId = null, string correlationId = null, string spanContext = null, object messageContext = null, IDictionary <string, object> headers = null, IConventions messageConventions = null) where T : class { var _spanContextHeader = _options.GetSpanContextHeader(); var _contextHeader = _options.GetContextHeader(); var _loggerEnabled = _options.Logger?.Enabled ?? true; var _contextEnabled = _options.Context?.Enabled ?? true; return(_busClient.PublishAsync(message, ctx => ctx.UsePublishConfiguration(cfg => cfg.WithProperties(properties => { properties.MessageId = string.IsNullOrWhiteSpace(messageId) ? Guid.NewGuid().ToString("N") : messageId; properties.CorrelationId = string.IsNullOrWhiteSpace(correlationId) ? Guid.NewGuid().ToString("N") : correlationId; properties.Timestamp = new AmqpTimestamp(DateTimeOffset.UtcNow.ToUnixTimeSeconds()); properties.Headers = new Dictionary <string, object>(); if (!string.IsNullOrWhiteSpace(spanContext)) { properties.Headers.Add(_spanContextHeader, spanContext); } if (_contextEnabled) { // add context to header IncludeMessageContext(messageContext, properties); } if (headers is { }) { foreach (var(key, value) in headers) { if (string.IsNullOrWhiteSpace(key) || value is null) { continue; } properties.Headers.TryAdd(key, value); } } var conventions = messageConventions ?? _conventionsProvider.Get <T>(); if (messageConventions is { })
public ContextProvider(IRabbitMQSerializer serializer, RabbitMqOptions options) { _serializer = serializer; HeaderName = options.GetContextHeader(); }