Garanties de remise de messagerie
Les garanties de remise de messagerie d’Orleans sont une fois au maximum, par défaut. Éventuellement, si la configuration indique d’effectuer de nouvelles tentatives après le délai d’expiration, Orleans assure une remise une fois au minimum à la place.
Plus précisément :
- Chaque message dans Orleans dispose d’un délai d’expiration automatique (le délai d’expiration exact peut être configuré). Si la réponse n’arrive pas à l’heure, l’élément Task renvoyé est endommagé avec une exception de délai d’expiration.
- Orleans peut être configuré pour effectuer de nouvelles tentatives automatiques après l’expiration du délai. Par défaut, il n’effectue pas de nouvelles tentatives automatiques.
- Bien entendu, le code d’application peut également choisir d’effectuer de nouvelles tentatives après l’expiration du délai.
Si le système Orleans est configuré pour ne pas effectuer de nouvelles tentatives automatiques (paramètre par défaut) et que l’application ne renvoie pas, Orleans fournit une remise des messages une fois au maximum. Un message sera remis une fois ou pas du tout. Il ne sera jamais remis deux fois.
Dans le système avec nouvelles tentatives (effectuées par le runtime ou par l’application), le message peut arriver plusieurs fois. Orleans ne fait actuellement rien pour stocker durablement les messages qui sont déjà arrivés et supprimer la deuxième remise. (Nous croyons que cela s’avérerait assez coûteux.) Ainsi, dans un système avec nouvelles tentatives, Orleans NE garantit PAS la remise une fois au maximum.
Si vous continuez à réessayer potentiellement indéfiniment, le message finira par arriver, fournissant ainsi la garantie de remise une fois au minimum. Notez que la caractéristique « finira par arriver » est quelque chose que le runtime doit garantir. Elle ne s’offre pas gratuitement d’elle-même, même si vous continuez à réessayer. Orleans assure la remise finale puisque les grains n’adoptent jamais un état d’échec permanent et un grain en échec finira par être réactivé sur un autre silo.
Ainsi, pour résumer : dans le système sans nouvelles tentatives, Orleans garantit une remise des messages une fois au maximum. Dans le système avec un nombre infini de nouvelles tentatives, Orleans garantit une remise une fois au minimum (et ne garantit pas une remise une fois au maximum).
Important
Dans le rapport technique Orleans, nous n’avons mentionné accidentellement que la 2e option avec des nouvelles tentatives automatiques. Nous avons oublié de mentionner que, par défaut, sans nouvelles tentatives, Orleans fournit une remise une fois au maximum.