コード例 #1
0
        public Task PublishAsync <T>(T message, MessagingPublisherOptions options = null,
                                     CancellationToken cancellationToken          = default)
        {
            options ??= MessagingPublisherOptions.Default;

            void NewEnvelopeCustomizer(MessagingEnvelope outgoingEnvelope)
            {
                var correlationId = CorrelationManager.GetCorrelationId();

                if (correlationId.HasValue)
                {
                    outgoingEnvelope.SetHeader(MessagingHeaders.CorrelationId, correlationId.ToString());
                }

                var messagingEnvelope = _messagingContextAccessor.MessagingContext?.MessagingEnvelope;

                if (messagingEnvelope != null)
                {
                    messagingEnvelope.TransferHeaderTo(outgoingEnvelope, MessagingHeaders.CorrelationId);
                    messagingEnvelope.TransferCustomHeadersTo(outgoingEnvelope);
                }

                options?.EnvelopeCustomizer?.Invoke(outgoingEnvelope);
            }

            return(_inner.PublishAsync(message, options with {
                EnvelopeCustomizer = NewEnvelopeCustomizer
            },
コード例 #2
0
        public Task PublishAsync <T>(T message, MessagingPublisherOptions options = null,
                                     CancellationToken cancellationToken          = default)
        {
            options ??= MessagingPublisherOptions.Default;

            void NewCustomizer(MessagingEnvelope outgoingEnvelope)
            {
                if (_tracer.ActiveSpan != null)
                {
                    _tracer.Inject(_tracer.ActiveSpan.Context, BuiltinFormats.TextMap,
                                   new TextMapInjectAdapter(outgoingEnvelope.Headers));
                }

                options.EnvelopeCustomizer?.Invoke(outgoingEnvelope);
            }

            var formattedTopicName = _topicRegistry.GetTopicForName(options.TopicName) ??
                                     _topicRegistry.GetTopicForMessageType(message.GetType());
            var operationName = $"Publisher {message.GetType().GetPrettyName()}";

            using (var scope = _tracer.BuildSpan(operationName)
                               .WithTag(Tags.Component, MessagingTags.ComponentMessaging)
                               .WithTag(Tags.SpanKind, Tags.SpanKindProducer)
                               .WithTag(Tags.MessageBusDestination, formattedTopicName)
                               .WithTag(MessagingTags.CorrelationId, CorrelationManager.GetCorrelationId()?.ToString())
                               .StartActive(true))
            {
                try
                {
                    return(_inner.PublishAsync(message, options with {
                        EnvelopeCustomizer = NewCustomizer
                    },
                                               cancellationToken));
                }
コード例 #3
0
        public Task PublishAsync <T>(T message, MessagingPublisherOptions options = null, CancellationToken cancellationToken = default)
        {
            options ??= MessagingPublisherOptions.Default;
            void NewCustomizer(MessagingEnvelope outgoingEnvelope)
            {
                outgoingEnvelope.SetHeader("SampleHeader", "SampleValue");
                options.EnvelopeCustomizer?.Invoke(outgoingEnvelope);
            }

            _logger.LogDebug("Message {@Message} was sent.", message);
            return(_inner.PublishAsync(message, options with {
                EnvelopeCustomizer = NewCustomizer
            }, cancellationToken));
コード例 #4
0
ファイル: MessageBusPublisher.cs プロジェクト: hfz-r/nbb
        public async Task PublishAsync <T>(T message, MessagingPublisherOptions publisherOptions = null,
                                           CancellationToken cancellationToken = default)
        {
            var outgoingEnvelope = PrepareMessageEnvelope(message, publisherOptions?.EnvelopeCustomizer);
            var envelopeData     = _messageSerDes.SerializeMessageEnvelope(outgoingEnvelope);

            var newTopicName = _topicRegistry.GetTopicForName(publisherOptions?.TopicName) ??
                               _topicRegistry.GetTopicForMessageType(message.GetType());

            await _messagingTransport.PublishAsync(newTopicName, envelopeData, cancellationToken);

            _logger.LogDebug("Messaging publisher sent a message for subject {Subject}", newTopicName);
            await Task.Yield();
        }
コード例 #5
0
        public async Task PublishAsync <T>(T message, MessagingPublisherOptions options = null,
                                           CancellationToken cancellationToken          = default)
        {
            var tenantId = _tenantContextAccessor.TenantContext.GetTenantId();

            options ??= MessagingPublisherOptions.Default;

            void NewCustomizer(MessagingEnvelope outgoingEnvelope)
            {
                outgoingEnvelope.SetHeader(MessagingHeaders.TenantId, tenantId.ToString());
                options.EnvelopeCustomizer?.Invoke(outgoingEnvelope);
            }

            await _inner.PublishAsync(message, options with {
                EnvelopeCustomizer = NewCustomizer
            }, cancellationToken);
コード例 #6
0
 public Task PublishAsync <T>(T message, MessagingPublisherOptions options = null,
                              CancellationToken cancellationToken          = default)
 {
     options?.EnvelopeCustomizer?.Invoke(new MessagingEnvelope(new Dictionary <string, string>(), message));
     return(Task.CompletedTask);
 }
コード例 #7
0
 public Task PublishAsync <T>(T message, MessagingPublisherOptions options = null,
                              CancellationToken cancellationToken          = default)
 => _busPublisher.PublishAsync(message, options, cancellationToken);