Garantías de entrega de mensajería

Las garantías de entrega de mensajería de Orleans se producen una vez como máximo de manera predeterminada. Opcionalmente, si se configuran para realizar reintentos cuando se haya agotado el tiempo de espera, Orleans proporciona entrega una vez como mínimo en su lugar.

Con más detalle:

  • Cada mensaje de Orleans tiene un tiempo de espera automático (se puede configurar el tiempo de espera exacto). Si la respuesta no llega a tiempo, el elemento Task devuelto se interrumpe con una excepción de tiempo de espera.
  • Orleans se puede configurar para realizar reintentos automáticos cuando se agota el tiempo de espera. De manera predeterminada, no realiza reintentos automáticos.
  • Por supuesto, el código de la aplicación también puede optar por realizar reintentos cuando se agota el tiempo de espera.

Si el sistema Orleans está configurado para no realizar reintentos automáticos (configuración predeterminada) y la aplicación no realiza reenvíos, Orleans proporciona entrega de mensajes una vez como máximo. Un mensaje se entrega una vez o ninguna. Nunca se va a entregar dos veces.

En el sistema con reintentos (ya sea por parte del runtime o de la aplicación), el mensaje puede llegar varias veces. Orleans actualmente no hace nada para almacenar de forma duradera qué mensajes ya han llegado y suprimir la segunda entrega. (Se cree que esta solución sería bastante costosa). Por lo tanto, en un sistema con reintentos, Orleans NO garantiza la entrega una vez como máximo.

Si sigue reintentando posiblemente de forma indefinida, el mensaje al final llega, lo que proporciona la garantía de entrega al menos una vez. Tenga en cuenta que "al final llega" es algo que el runtime necesita garantizar. No sale gratis por sí mismo, aunque se siga reintentando. Orleans proporciona entrega final, ya que los granos nunca entran en estado de error permanente y un grano erróneo al final se vuelve a activar en otro silo.

Para resumir: en el sistema sin reintentos, Orleans garantiza la entrega de mensajes una vez como máximo. En el sistema con reintentos infinitos, Orleans garantiza una vez como mínimo (y no garantiza una vez como máximo).

Importante

En el informe técnico de Orleans solo se menciona accidentalmente la segunda opción con reintentos automáticos. Se olvidó mencionar que, de manera predeterminada, sin reintentos, Orleans proporciona entregas una vez como máximo.