Пример #1
0
        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 { })
Пример #2
0
 public ContextProvider(IRabbitMQSerializer serializer, RabbitMqOptions options)
 {
     _serializer = serializer;
     HeaderName  = options.GetContextHeader();
 }