Compartilhar via


Garantias de entrega de mensagens

As garantias de entrega de mensagens do Orleans são no máximo uma vez, por padrão. Opcionalmente, se configurado para fazer novas tentativas após o tempo limite, o Orleans fornecerá entrega pelo menos uma vez.

Com mais detalhes:

  • Cada mensagem no Orleans tem um tempo limite automático (o tempo limite exato pode ser configurado). Se a resposta não chegar a tempo, o Task retornado será interrompido com uma exceção de tempo limite.
  • O Orleans pode ser configurado para fazer novas tentativas automáticas após o tempo limite. Por padrão, ele não faz novas tentativas automaticamente.
  • O código do aplicativo, é claro, também pode optar por fazer novas tentativas após o tempo limite.

Se o sistema do Orleans tiver configurado para não fazer novas tentativas automáticas (configuração padrão) e o aplicativo não estiver reenviando, o Orleans fornecerá entrega de mensagens no máximo uma vez. Uma mensagem será entregue uma vez ou não será entregue. Ela nunca será entregue duas vezes.

No sistema configurado para novas tentativas (pelo runtime ou pelo aplicativo), a mensagem pode chegar várias vezes. Atualmente, o Orleans não faz nada para armazenar de forma durável quais mensagens já chegaram e suprimir a segunda entrega. (Acreditamos que isso seria muito caro.) Assim, em um sistema com configurado para novas tentativas, o Orleans não garante entrega no máximo uma vez.

Se você continuar indefinidamente com novas tentativas, a mensagem eventualmente chegará, fornecendo assim a garantia de entrega pelo menos uma vez. Observe que "eventualmente chegará" é algo que o runtime precisa garantir. Ele não vem de graça apenas por si só, mesmo que você continue tentando. O Orleans fornece entrega eventual, uma vez que as granularidades nunca entram em nenhum estado de falha permanente e uma granularidade com falha será eventualmente reativada em outro silo.

Portanto, para resumir: no sistema sem configuração para novas tentativas, o Orleans garante entrega de mensagens no máximo uma vez. No sistema com tentativas infinitas, o Orleans garante pelo menos uma vez (e não garante no máximo uma vez).

Importante

No relatório técnico do Orleans, mencionamos acidentalmente apenas a 2ª opção com tentativas automáticas. Esquecemos de mencionar que, por padrão, sem novas tentativas, o Orleans fornece entrega no máximo uma vez.