Domanda

Ho un'applicazione NServiceBus che un dato messaggio non può essere elaborato a causa di qualche evento esterno non avendo avuto luogo. Poiché questo altro evento non è un evento NSB non posso implementare saghe correttamente.

Tuttavia, piuttosto che ri-fare la coda il messaggio (che causerebbe un loop fino a quando si è verificato l'evento esterno), sto avvolgendo il messaggio in un altro messaggio (DelayMessage) e in coda che invece. Il DelayMessage viene prelevato da un servizio diverso e posto in un database finché l'intervallo tentativi scade. A quel punto, i servizi ritardo re-code del messaggio sulla coda originale in modo un altro tentativo possono essere fatte.

Tuttavia, questo può accadere più di una volta se questo evento esterno non ha ancora avuto luogo, e nel caso in cui che anche non succede mai, voglio limitare il numero di viaggi in tutto il messaggio richiede. Questo significa che il DelayMessage ha una proprietà MaxRetries, ma che si perde quando il servizio ritardo accoda il messaggio originale per il tentativo.

Quali altre opzioni mi manca? Sono felice di accettare il fatto che ci sia una soluzione totalmente diversa a questo problema.

È stato utile?

Soluzione

Consideriamo l'implementazione di un saga che memorizza quel primo messaggio, aggrappandosi ad esso fino a quando il secondo messaggio arriva. Si potrebbe anche voler saga di aprire una timeout pure in modo che il processo ha vinto' t aspettare a tempo indeterminato se questo secondo messaggio è perso o qualcosa del genere.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top