Particular / NServiceBus.MessagingBridge

Other
4 stars 1 forks source link

Transfers with mapping errors should immediately be forwarded to the error queue but are retried #289

Open ramonsmits opened 1 year ago

ramonsmits commented 1 year ago

Description

If the bridge has incomplete or incorrect configuration that results in a mapping error is retried according to the number of retry attempts.

Expected behavior

The message should be immediately forwarded to the error queue.

Actual behavior

The message is retried based on the number of retry attempts.

Versions

All versions

Steps to reproduce

  1. Ensure there is a mapping error like a case-sensitivity mismatch.
  2. Transfer a message via the bridge

Observe that the message is retried.

Relevant log output

warn: MessageShovelErrorHandlingPolicy[0]
      Message shovel operation failed and will be retried
      System.Exception: Failed to shovel message for endpoint Samples.MessagingBridge.AsbEndpoint with id aeb9351d-a527-4b96-b01a-276295f32868\101499078 from msmq to azureservicebus ---> System.Exception: No target address mapping could be found for source address: EndpointX@MachineB. Ensure names have correct casing as mappings are case-sensitive. Nearest configured match: endpointx@machineb
         at EndpointRegistry.TranslateToTargetAddress(String sourceAddress) in S:\NServiceBus.MessagingBridge\src\NServiceBus.MessagingBridge\EndpointRegistry.cs:line 68
         at MessageShovel.TransformAddressHeader(OutgoingMessage messageToSend, IEndpointRegistry targetEndpointRegistry, String headerKey) in S:\NServiceBus.MessagingBridge\src\NServiceBus.MessagingBridge\MessageShovel.cs:line 95
         at MessageShovel.<TransferMessage>d__1.MoveNext() in S:\NServiceBus.MessagingBridge\src\NServiceBus.MessagingBridge\MessageShovel.cs:line 58
         --- End of inner exception stack trace ---
         at MessageShovel.<TransferMessage>d__1.MoveNext() in S:\NServiceBus.MessagingBridge\src\NServiceBus.MessagingBridge\MessageShovel.cs:line 74
      --- End of stack trace from previous location where exception was thrown ---
         at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
         at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
         at NServiceBus.Transport.Msmq.ReceiveStrategy.<TryProcessMessage>d__7.MoveNext() in /_/src/NServiceBus.Transport.Msmq/ReceiveStrategy.cs:line 112
      --- End of stack trace from previous location where exception was thrown ---
         at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
         at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
         at NServiceBus.Transport.Msmq.ReceiveOnlyNativeTransactionStrategy.<ProcessMessage>d__2.MoveNext() in /_/src/NServiceBus.Transport.Msmq/ReceiveOnlyNativeTransactionStrategy.cs:line 93
warn: MessageShovelErrorHandlingPolicy[0]
      Message shovel operation failed and will be retried
      System.Exception: Failed to shovel message for endpoint Samples.MessagingBridge.AsbEndpoint with id aeb9351d-a527-4b96-b01a-276295f32868\101499078 from msmq to azureservicebus ---> System.Exception: No target address mapping could be found for source address: EndpointX@MachineB. Ensure names have correct casing as mappings are case-sensitive. Nearest configured match: endpointx@machineb
         at EndpointRegistry.TranslateToTargetAddress(String sourceAddress) in S:\NServiceBus.MessagingBridge\src\NServiceBus.MessagingBridge\EndpointRegistry.cs:line 68
         at MessageShovel.TransformAddressHeader(OutgoingMessage messageToSend, IEndpointRegistry targetEndpointRegistry, String headerKey) in S:\NServiceBus.MessagingBridge\src\NServiceBus.MessagingBridge\MessageShovel.cs:line 95
         at MessageShovel.<TransferMessage>d__1.MoveNext() in S:\NServiceBus.MessagingBridge\src\NServiceBus.MessagingBridge\MessageShovel.cs:line 58
         --- End of inner exception stack trace ---
         at MessageShovel.<TransferMessage>d__1.MoveNext() in S:\NServiceBus.MessagingBridge\src\NServiceBus.MessagingBridge\MessageShovel.cs:line 74
      --- End of stack trace from previous location where exception was thrown ---
         at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
         at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
         at NServiceBus.Transport.Msmq.ReceiveStrategy.<TryProcessMessage>d__7.MoveNext() in /_/src/NServiceBus.Transport.Msmq/ReceiveStrategy.cs:line 112
      --- End of stack trace from previous location where exception was thrown ---
         at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
         at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
         at NServiceBus.Transport.Msmq.ReceiveOnlyNativeTransactionStrategy.<ProcessMessage>d__2.MoveNext() in /_/src/NServiceBus.Transport.Msmq/ReceiveOnlyNativeTransactionStrategy.cs:line 93
fail: MessageShovelErrorHandlingPolicy[0]
      Message shovel operation failed, message will be moved to bridge.error@ZOLDER
      System.Exception: Failed to shovel message for endpoint Samples.MessagingBridge.AsbEndpoint with id aeb9351d-a527-4b96-b01a-276295f32868\101499078 from msmq to azureservicebus ---> System.Exception: No target address mapping could be found for source address: EndpointX@MachineB. Ensure names have correct casing as mappings are case-sensitive. Nearest configured match: endpointx@machineb
         at EndpointRegistry.TranslateToTargetAddress(String sourceAddress) in S:\NServiceBus.MessagingBridge\src\NServiceBus.MessagingBridge\EndpointRegistry.cs:line 68
         at MessageShovel.TransformAddressHeader(OutgoingMessage messageToSend, IEndpointRegistry targetEndpointRegistry, String headerKey) in S:\NServiceBus.MessagingBridge\src\NServiceBus.MessagingBridge\MessageShovel.cs:line 95
         at MessageShovel.<TransferMessage>d__1.MoveNext() in S:\NServiceBus.MessagingBridge\src\NServiceBus.MessagingBridge\MessageShovel.cs:line 58
         --- End of inner exception stack trace ---
         at MessageShovel.<TransferMessage>d__1.MoveNext() in S:\NServiceBus.MessagingBridge\src\NServiceBus.MessagingBridge\MessageShovel.cs:line 74
      --- End of stack trace from previous location where exception was thrown ---
         at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
         at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
         at NServiceBus.Transport.Msmq.ReceiveStrategy.<TryProcessMessage>d__7.MoveNext() in /_/src/NServiceBus.Transport.Msmq/ReceiveStrategy.cs:line 112
      --- End of stack trace from previous location where exception was thrown ---
         at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
         at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
         at NServiceBus.Transport.Msmq.ReceiveOnlyNativeTransactionStrategy.<ProcessMessage>d__2.MoveNext() in /_/src/NServiceBus.Transport.Msmq/ReceiveOnlyNativeTransactionStrategy.cs:line 93

Additional Information

Workarounds

Possible solutions

Additional information

danielmarbach commented 1 year ago

@ramonsmits @andreasohlund and I looked at this issue and felt like it would be more an improvement than a bug. We have relabeled it. You are welcome to chime in if you disagree.