We have encountered a scenario where the Rhino ESB fails to move a message to the error queue due to an exception in our message module.
If a message module for some reason throws an exception in the "MessageProcessingFailure" event handler, it can lead to that the "MessageProcessingFailure" event handler which should move the failed message to the error queue is not executed (depending on the execution order of the event handlers).
The consequence is that our system enters a tight loop since the failed message gets retried over and over again without ever getting off the main queue.
The MessageHandlingCompletion class which raises the "MessageProcessingFailure" event has a try-catch surrounding the entire invocation. Instead it could retrieve the invocation list and surround each event subscriber with a try-catch.
I am aware that we should not throw exceptions in this event handler, but still should the Service Bus not be able to keep running even in a scenario like this? The alternative is to surround all event handling code with try-catch blocks.
I can submit a fix for this, if you agree on the solution proposed above?