Garantias de entrega de mensagens
Orleans As garantias de entrega de mensagens são no máximo uma vez, por padrão. Opcionalmente, se configurado para fazer novas tentativas no tempo limite, Orleans fornece entrega pelo menos uma vez.
Mais concretamente:
- Cada mensagem tem Orleans um tempo limite automático (o tempo limite exato pode ser configurado). Se a resposta não chegar a tempo, o retorno Task será quebrado com uma exceção de tempo limite.
- Orleans pode ser configurado para fazer repetições automáticas após o tempo limite. Por padrão, ele não faz repetições automáticas.
- O código do aplicativo, é claro, também pode optar por fazer novas tentativas após o tempo limite.
Se o Orleans sistema estiver configurado para não fazer repetições automáticas (configuração padrão) e o aplicativo não estiver reenviando – Orleans fornece entrega de mensagem no máximo uma vez. Uma mensagem será entregue uma vez ou não será entregue de todo. Nunca será entregue duas vezes.
No sistema com novas tentativas (seja pelo tempo de execução ou pelo aplicativo), a mensagem pode chegar várias vezes. Orleans atualmente não faz nada para armazenar de forma durável quais mensagens já chegaram e suprimir a segunda entrega. (Acreditamos que isso seria bastante caro.) Assim, em um sistema com novas tentativas Orleans NÃO garante no máximo uma vez a entrega.
Se você continuar tentando novamente potencialmente indefinidamente, a mensagem acabará chegando, fornecendo assim a garantia de entrega pelo menos uma vez. Observe que "eventualmente chegará" é algo que o tempo de execução precisa garantir. Ele não vem de graça apenas por si só, mesmo se você continuar tentando. Orleans fornece entrega eventual, uma vez que os grãos nunca entram em qualquer estado de falha permanente e um grão com falha acabará sendo reativado em outro silo.
Resumindo: no sistema sem novas tentativas Orleans garante a entrega de mensagens no máximo uma vez. No sistema com infinitas tentativas, Orleans garante pelo menos uma vez (e não garante no máximo uma vez).
Importante
Orleans No relatório técnico acidentalmente apenas mencionamos a 2ª opção com tentativas automáticas. Esquecemos de mencionar que, por padrão, sem tentativas, Orleans fornece entrega no máximo uma vez.