Redis
 sql >> Base de données >  >> NoSQL >> Redis

La saga MassTransit avec la persistance Redis donne à Method Accpet n'a pas d'exception d'implémentation

Le problème ici est requête-réponse.

Cela fonctionne comme ceci :

  1. MT place l'identifiant de la requête dans la propriété d'état de la saga UrlRequestId
  2. La demande est envoyée
  3. Vous obtenez une réponse, la réponse contient l'adresse du demandeur et l'identifiant de la demande dans son en-tête
  4. MT utilise le référentiel saga pour trouver votre instance en utilisant repo.Find(x => x.UrlRequestId == message.Headers.RequestId) (donc ce n'est pas le vrai code mais c'est ce qui se passe)
  5. Redis (ou tout autre KVS) ne prend pas en charge les requêtes, nous ne prenons donc pas non plus en charge les requêtes dans les référentiels saga et vous obtenez une exception "non implémentée"

Votre spécification de corrélation pour les réponses n'a aucun effet depuis Request utilise toujours des en-têtes pour trouver une instance de saga à laquelle appartient la réponse.

Vous pouvez contourner ce problème en n'utilisant pas de requête-réponse et en émettant à la place un événement en utilisant context.Publish(new LinkCreatedEvent { ... , CorrelationId = context.Message.CorrelationId }) et en utilisant la corrélation habituelle.