Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Die MassTransit-Saga mit Redis-Persistenz gibt an, dass die Methode Accpet keine Implementierungsausnahme hat

Das Problem hier ist Request-Response.

So funktioniert es:

  1. MT fügt die Anforderungs-ID in die Saga-Zustandseigenschaft UrlRequestId ein
  2. Die Anfrage wird gesendet
  3. Sie erhalten eine Antwort zurück, die Antwort enthält die Anfordereradresse und die Anfrage-ID in ihrem Header
  4. MT verwendet das Saga-Repository zum Finden Ihre Instanz mit repo.Find(x => x.UrlRequestId == message.Headers.RequestId) (daher ist dies nicht der echte Code, aber das passiert)
  5. Redis (oder jedes andere KVS) unterstützt keine Abfragen, daher unterstützen wir auch keine Abfragen in Saga-Repositories und Sie erhalten die Ausnahme „nicht implementiert“

Ihre Korrelationsangabe für Antworten ist seit Request wirkungslos verwendet immer Header, um eine Saga-Instanz zu finden, zu der die Antwort gehört.

Sie können dies umgehen, indem Sie Request-Response nicht verwenden und stattdessen ein Ereignis mit context.Publish(new LinkCreatedEvent { ... , CorrelationId = context.Message.CorrelationId }) ausgeben und unter Verwendung der üblichen Korrelation.