Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

A saga MassTransit com persistência do Redis dá ao Method Acpet não ter uma exceção de implementação


O problema aqui é solicitação-resposta.

Funciona assim:
  1. MT coloca o ID da solicitação na propriedade de estado da saga UrlRequestId
  2. A solicitação é enviada
  3. Você recebe uma resposta, a resposta contém o endereço do solicitante e o ID da solicitação em seu cabeçalho
  4. MT usa repositório saga para encontrar sua instância usando repo.Find(x => x.UrlRequestId == message.Headers.RequestId) (portanto, este não é o código real, mas é isso que acontece)
  5. O Redis (ou qualquer outro KVS) não suporta consultas, então também não suportamos consultas em repositórios saga e você obtém a exceção "não implementada"

Sua especificação de correlação para respostas não tem efeito desde Request sempre usa cabeçalhos para localizar uma instância de saga à qual a resposta pertence.

Você pode contornar isso não usando solicitação-resposta e, em vez disso, emitir um evento usando context.Publish(new LinkCreatedEvent { ... , CorrelationId = context.Message.CorrelationId }) e usando a correlação usual.