MsmqIntegrationBinding, poison messages and redundant calls
-
While using MsmqIntegrationBinding to read transactional queues on multiple threads, when a poison message occurs (MsmqPoisonMessageException) it will set the service instance to a faulted state. When this happens, any parallel threads' transactions are rolled back (therefore the messages go back on the queue, even though they have already started processing). Assume that the process started by each of these messages is not transactional (therefore not enlisted in the transaction and not rolled back). The obvious choice is to move the poison message to another queue and restart the service instance. When this happens it will pick up the messages that have already started processing before and will cause redundant processing. Can you see any way to avoid this?