-
Notifications
You must be signed in to change notification settings - Fork 48
Closed
Closed
Copy link
Description
Describe the bug
Description
If a message is retried but fails, and then it's retried a second time using the Edit & retry functionality ServiceControl returns a value cannot be an empty string or composed entirely of whitespace error.
Expected behavior
Message is retried successfully at the originating endpoint if the endpoint is able to process the message.
Actual behavior
An error is returned from ServiceControl: System.ArgumentException: The value cannot be an empty string or composed entirely of whitespace. (Parameter 'destination')
Versions
6.2.1+
Steps to reproduce
This was tested using the RabbitMQ transport.
- Send a message to a handler and have it fail
- Retry the message from ServicePulse - have the message fail again
- Update the handler to no longer fail the message
- Retry the message in ServicePulse via the
Retry & editfunctionality
Observe the returned error from ServiceControl
Relevant log output
System.ArgumentException: The value cannot be an empty string or composed entirely of whitespace. (Parameter 'destination')
at System.ArgumentException.ThrowNullOrWhiteSpaceException(String argument, String paramName)
at NServiceBus.Routing.UnicastAddressTag..ctor(String destination) in /_/src/NServiceBus.Core/Routing/UnicastAddressTag.cs:line 16
at NServiceBus.Routing.UnicastRoutingStrategy.Apply(Dictionary`2 headers) in /_/src/NServiceBus.Core/Routing/UnicastRoutingStrategy.cs:line 24
at NServiceBus.RoutingContextExtensions.ToTransportOperation(IRoutingContext context, RoutingStrategy strategy, DispatchConsistency dispatchConsistency, Boolean copySharedMutableMessageState) in /_/src/NServiceBus.Core/Pipeline/Outgoing/RoutingContextExtensions.cs:line 16
at NServiceBus.RoutingToDispatchConnector.Invoke(IRoutingContext context, Func`2 stage) in /_/src/NServiceBus.Core/Pipeline/Outgoing/RoutingToDispatchConnector.cs:line 33
at NServiceBus.AttachSenderRelatedInfoOnMessageBehavior.Invoke(IRoutingContext context, Func`2 next) in /_/src/NServiceBus.Core/Pipeline/Outgoing/AttachSenderRelatedInfoOnMessageBehavior.cs:line 45
at NServiceBus.Pipeline.Behavior`1.<>c__DisplayClass0_0.<Invoke>b__0() in /_/src/NServiceBus.Core/Pipeline/Behavior.cs:line 24
at NServiceBus.NativeMessageCustomizationBehavior.Invoke(IRoutingContext context, Func`1 next) in /_/src/Transport/Sending/NativeMessageCustomizationBehavior.cs:line 24
at NServiceBus.Pipeline.Behavior`1.Invoke(TContext context, Func`2 next) in /_/src/NServiceBus.Core/Pipeline/Behavior.cs:line 24
at NServiceBus.Pipeline`1.Invoke(TContext context) in /_/src/NServiceBus.Core/Pipeline/Pipeline.cs:line 49
at NServiceBus.PipelineInvocationExtensions.InvokePipeline[TContext](TContext context) in /_/src/NServiceBus.Core/Pipeline/PipelineInvocationExtensions.cs:line 10
at NServiceBus.ForkExtensions.Fork[TFromContext,TToContext,TForkContext](IForkConnector`3 forkConnector, TForkContext context) in /_/src/NServiceBus.Core/Pipeline/ForkExtensions.cs:line 15
at NServiceBus.RetryAcknowledgementBehavior.<>c__DisplayClass2_0.<<Invoke>g__ConfirmSuccessfulRetry|0>d.MoveNext() in /_/src/NServiceBus.Core/ServicePlatform/Retries/RetryAcknowledgementBehavior.cs:line 44
--- End of stack trace from previous location ---
at NServiceBus.RetryAcknowledgementBehavior.Invoke(ITransportReceiveContext context, Func`2 next) in /_/src/NServiceBus.Core/ServicePlatform/Retries/RetryAcknowledgementBehavior.cs:line 29
at NServiceBus.MainPipelineExecutor.Invoke(MessageContext messageContext, CancellationToken cancellationToken) in /_/src/NServiceBus.Core/Pipeline/MainPipelineExecutor.cs:line 50
at NServiceBus.MainPipelineExecutor.Invoke(MessageContext messageContext, CancellationToken cancellationToken) in /_/src/NServiceBus.Core/Pipeline/MainPipelineExecutor.cs:line 78
at NServiceBus.Transport.RabbitMQ.MessagePump.Process(AsyncEventingBasicConsumer consumer, BasicDeliverEventArgs message, CancellationToken messageProcessingCancellationToken) in /_/src/NServiceBus.Transport.RabbitMQ/Receiving/MessagePump.cs:line 414Additional Information
This is being caused by the ServiceControl.Retry.AcknowledgementQueue header being cleared and seems to be introduced by this PR in the 6.2.1 release.