Si j'ai une saga composée de deux types de messages, disons démarrés par message1 et complétés par message2, puis-je retourner un rappel si un message2 arrive sans qu'un message1 existe déjà? Je sais qu'il va le vider dans la file d'erreurs, mais je veux être capable de retourner un état au client expéditeur pour dire qu'il y a un état d'erreur dû au fait que le premier message n'est pas là.Dans NServiceBus, comment puis-je gérer lorsqu'un message arrive sans saga correspondante?
Répondre
Alors je me suis dehors, je avais juste besoin de mettre en œuvre IFindSagas
pour le type de message:
public class MySagaFinder : IFindSagas<MySagaData>.Using<Message2>
{
public ISagaPersister Persister { get; set; }
public IBus Bus { get; set; }
public MySagaFinder FindBy(Message2 message)
{
var data = Persister.Get<MySagaData>("MessageIdProperty", message.MessageIdProperty);
if (data == null)
{
Bus.Return(0);
}
return data;
}
}
Je ne sais pas si cela est le droit façon de le faire, mais ça marche!
Si vous avez une saga qui peut recevoir deux messages, mais les messages peuvent être reçus dans n'importe quel ordre, assurez-vous que la saga peut être démarrée par les deux messages. Ensuite, vérifiez si les deux messages sont arrivés en définissant un état dans la saga elle-même. Si les deux messages sont arrivés, marquez-le comme complet. Le comportement par défaut de NServicebBus est d'ignorer tout message qui n'a pas de saga correspondante. C'est parce que vous pouvez définir un délai d'expiration, par exemple. Si rien ne se passe dans les 24 heures, la saga peut envoyer un message Timeout à lui-même. Mais si quelque chose s'est passé et que vous avez marqué votre saga comme terminée, que devrait-il arriver au message Timeout? Par conséquent, NServiceBus l'ignore.
- 1. Nservicebus Saga
- 2. NServicebus saga de message de retard?
- 3. NServicebus saga course condition
- 4. NServiceBus Saga - Comment configurer millisToSleepBetweenMessages?
- 5. rébus équivalent à NServiceBus Saga ReplyToOriginator
- 6. Comment connecter si saga nservicebus est déjà commencé
- 7. nservicebus accès simultané aux données saga
- 8. Comment empêcher le démarrage d'une saga NServiceBus plusieurs fois?
- 9. Comment créer des tests unitaires pour NServiceBus Saga quand Saga a plus d'un gestionnaire
- 10. NServiceBus: Gérer les messages sur demande
- 11. NserviceBus ne charge pas les données saga existantes
- 12. Comment créer des tests unitaires pour NServiceBus Saga?
- 13. Que se passe-t-il dans une saga NServiceBus lorsque le message IAmStartedBy vient après le message IHandle?
- 14. Injection de propriété NserviceBus
- 15. NServiceBus Reply Message d'avertissement
- 16. Interception de message NServiceBus?
- 17. Comment puis-je gérer manuellement tout type de message souscrit dans NServiceBus?
- 18. Popup lorsqu'un nouveau message arrive
- 19. NServiceBus Message Queues Build Up
- 20. Java message socket arrive pour
- 21. Modification de la manière dont nHibernate enregistre les données Saga dans nServiceBus
- 22. NServiceBus - Comment passer des en-têtes personnalisés dans l'enveloppe Message?
- 23. un message synchronisé avec nservicebus
- 24. NServiceBus ne publie aucun message
- 25. IFindSagas avec la persistance de la saga Raven et plusieurs propriétés dans NServiceBus
- 26. NServiceBus: Reçu un message vide
- 27. NServiceBus: cryptage au niveau du message
- 28. NServiceBus sans file d'entrée
- 29. Comment faire nservicebus persistent saga en mémoire pour le serveur d'auto-hôte
- 30. Comment définir CurrentMessageContext.TimeSent pour un test dans NServiceBus?
Il n'y a jamais de manière définitive, cela dépend toujours. Et il n'y a pas beaucoup de détails dans la question, mais je suppose que vous êtes sur la mauvaise voie. Il y a de bonnes chances que le premier message ne soit pas encore traité. Simple parce que le deuxième message arrive en premier. C'est une messagerie asynchrone, ce qui signifie que les messages ne viennent pas toujours dans le même ordre. Jetez un oeil à ma réponse initiale. Ce que vous utilisez ici est la recherche de saga complexe, qui est destinée à quand saga est déjà démarré. Pas pour votre scénario. –