Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Poison message should not be send to the error queue #136

Open
ramonsmits opened this issue Jun 10, 2020 · 2 comments
Open

Poison message should not be send to the error queue #136

ramonsmits opened this issue Jun 10, 2020 · 2 comments

Comments

@ramonsmits
Copy link
Member

ramonsmits commented Jun 10, 2020

When messages fail header deserialization the transport forward these messages to the error queue. Problem is that SC cannot do anything with these messages as there is no FailedQ header. The bad thing here is that customers do not have a way to 'retry' such messages as we don't know from which queue the messages was forwarded.

Such poison messages are probably best moved to a Poison (sub)queue specific to the endpoint.

For example, the following issue caused a massive amount of messages to fail and it was a huge problem to solve and required manual inspection and heuristics to move the messages back to the correct queues:

@ramonsmits ramonsmits self-assigned this Jun 10, 2020
@ramonsmits
Copy link
Member Author

Solutions:

  • Foward to endpoint specific "poison" queue (endpointname + .poison)
  • Move to "poison" subqueue as WCF does via native MQMoveMessage API.
  • Base64 encoding "extension" put the base64 string in a new header collection so that we can add the "FailedQ" header and serializer it so that it can safely be send to the error queue.
  • Reject the message via native MQMarkMessageRejected API so that it is put in the TDLQ of the sender.

@dvdstelt
Copy link
Member

dvdstelt commented Apr 7, 2022

+1000.

We just had a call with a customer that paid a couple of thousand for critical support, paid Microsoft for support and possible Dynatrace for support. The error was "failed to import because it's missing NServiceBus.FailedQ header", but the problem was what Ramon described above.
2020 isn't the year this was registered, it was the year I joined this company! ;-)

@ramonsmits ramonsmits removed their assignment Jun 27, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants