If I understand correctly, when outgoing messages are not dispatched immediately after the outbox transaction has committed, the incoming message being handled is not acknowledged to the broker. It is then retried, de-duplicated (handlers are not executed), and any pending outgoing messages are re-dispatched. So my question is: is there any way to force dispatching of pending messages in the Outbox when retries on the incoming message are already consumed?
When all the immediate and delayed retries are consumed the message is send to the error queue from where it is picked up by ServiceControl. Later it can be retried (sent for processing again) through ServicePulse or ServiceInsight. Assuming it has already been processed (but the outgoing messages were not dispatched), the processing endpoint will re-attempt to dispatch the outgoing messages.
Because of this behavior it is essential to set the Outbox retention period (defaults to 7 days) to the maximum time a message can spend waiting for retrying in ServiceControl. Assuming default retention period, if a message is retried after 10 days, the processing endpoint will no more have the associated outbox record which will result in duplicate processing.