Uma maneira de lidar com isso é usar ouvintes baseados em pull em vez de baseados em push. Cada ouvinte acompanha sua última mensagem lida e pode solicitar "mensagens desde X". Você pode usar a pesquisa ou uma notificação quando um novo evento entrar ou ambos para acionar solicitações de mensagens. Não há mais filas, mas o ouvinte precisará armazenar seu último ID de mensagem processada. Você também precisa armazenar os eventos de uma maneira que preserve a ordem para suportar solicitações de ouvinte.
Sempre que um ouvinte falha em processar um evento, ele pode registrar a falha em qualquer infraestrutura de registro configurada. Então você observará ou será notificado da falha por sua infraestrutura de monitoramento. Depois de corrigir esse listener específico e reimplementá-lo, o ouvinte será iniciado de volta de onde parou.