Пример #1
0
        public async Task StartsNoActivityIfThereIsNoCurrentActivity()
        {
            var step = new OutgoingDiagnosticsStep();

            var headers          = GetMessageHeaders("id", Headers.IntentOptions.PublishSubscribe);
            var message          = new Message(headers, new object());
            var transportMessage = new TransportMessage(headers, Array.Empty <byte>());

            var destinations = new DestinationAddresses(new List <string> {
                "MyQueue"
            });

            var context = new OutgoingStepContext(message, AmbientTransactionContext.Current, destinations);

            context.Save(transportMessage);

            var hadActivity        = false;
            var callbackWasInvoked = false;

            await step.Process(context, () =>
            {
                hadActivity        = Activity.Current != null;
                callbackWasInvoked = true;
                return(Task.CompletedTask);
            });

            Assert.That(hadActivity, Is.False);
            Assert.That(headers, Has.No.ContainKey(RebusDiagnosticConstants.TraceStateHeaderName));
            Assert.That(callbackWasInvoked, Is.True);
        }
Пример #2
0
        public async Task StartsNewActivityIfThereIsAlreadyAParentActivity()
        {
            Assume.That(RebusDiagnosticConstants.ActivitySource.HasListeners(), Is.True);

            var step = new OutgoingDiagnosticsStep();

            var headers = GetMessageHeaders("id", Headers.IntentOptions.PublishSubscribe);

            var message          = new Message(headers, new object());
            var transportMessage = new TransportMessage(headers, Array.Empty <byte>());

            var destinations = new DestinationAddresses(new List <string> {
                "MyQueue"
            });

            var context = new OutgoingStepContext(message, AmbientTransactionContext.Current, destinations);

            context.Save(transportMessage);

            using var activity = new Activity("MyActivity");
            activity.SetIdFormat(ActivityIdFormat.W3C);
            activity.Start();

            Assume.That(activity, Is.SameAs(Activity.Current));
            var hadActivity       = false;
            var hadExpectedParent = false;

            await step.Process(context, () =>
            {
                hadActivity = Activity.Current != null;

                hadExpectedParent = Activity.Current?.ParentSpanId == activity.SpanId;
                return(Task.CompletedTask);
            });

            Assert.That(hadActivity, Is.True);
            Assert.That(hadExpectedParent, Is.True);
            Assert.That(transportMessage.Headers, Contains.Key(RebusDiagnosticConstants.TraceStateHeaderName));
            Assert.That(transportMessage.Headers[RebusDiagnosticConstants.TraceStateHeaderName], Is.Not.Null.And.Not.Empty);
        }
Пример #3
0
 /// <summary>
 /// Constructs the step context, initially stashing the given <see cref="Message"/>, list of <see cref="DestinationAddresses"/> and <see cref="ITransactionContext"/> into its bag of objects
 /// </summary>
 public OutgoingStepContext(Message logicalMessage, ITransactionContext transactionContext, DestinationAddresses destinationAddresses)
 {
     Save(logicalMessage);
     Save(destinationAddresses);
     Save(transactionContext);
 }
Пример #4
0
 public void AddOutgoingMessage(string messageId, DestinationAddresses destinationAddresses, TransportMessage transportMessage)
 {
     IdempotencyData.AddOutgoingMessage(messageId, destinationAddresses, transportMessage);
 }