Suppression d'un message de la file d'attente uniquement si l'utilisateur fait une opération

StackOverflow https://stackoverflow.com/questions/1370096

  •  21-09-2019
  •  | 
  •  

Question

Nous avons des applications MVC qui lit les données de MSMQ. Nous essayons de trouver un moyen de lire le message de la file d'attente et le retirer de la file d'attente uniquement si l'utilisateur a fait une opération réussie sur la file d'attente. Le message doit rester dans la file d'attente jusqu'à ce que l'utilisateur termine le traitement, le message ne doit pas être disponible à quelqu'un d'autre jusqu'à ce que l'utilisateur qui traite l'objet de message a terminé l'opération.

Y at-il une propriété pour un objet de message à définir comme ce qui ne sera pas jeté un œil permettre la lecture de ce message jusqu'à ce que l'éther est replacée dans la file d'attente ou retirée de la file d'attente?

Nous ne sommes pas sûrs si vous utilisez MSMQ est une bonne idée dans ce cas?

Était-ce utile?

La solution

On dirait que vous avez besoin d'utiliser la file d'attente (s) en mode transactionnel. Ensuite, votre client peut recevoir un message, le processus, et puis valider la transaction, à quel point le message sera enfin dequeued. Alors que la transaction est cependant actif, d'autres clients ne voient pas le message -. Il se tiendra en réserve jusqu'à ce que la transaction terminée ou annulée

Cet article MSDN a une vue d'ensemble décent de modèles d'utilisation pour la messagerie fiable avec MSMQ:

http://msdn.microsoft.com/en-us/library /ms978430.aspx

Autres conseils

La file d'attente est la bonne idée. Votre approche de « laisser dans la file d'attente, verrouillé, mais toujours de type de disponibles » est erroné.

Vous pouvez avoir besoin de plusieurs files d'attente.

  1. Processus A enqueues quelque chose dans la file d'attente 1

  2. Processus B dequeues de file d'attente 1 et commence à travailler.

    • Si B est réussie, c'est tout.

    • Dans le cas contraire, il se mis en attente un autre endroit (peut-être la même file d'attente, ou peut-être la file d'attente 2) pour les travaux de suivi.

Si elle est retournée dans la file d'attente 1, B trouver à nouveau, par la suite. S'il est allé à une autre file d'attente, puis un autre processus cleanup, l'exploitation forestière, fixup d'erreur ou autre chose, peut-être mettre quelque chose dans la file d'attente 1.

Une file d'attente n'est pas une base de données - il n'y a rien stateful (pas « ne me regarde pas, je suis en cours de traitement »)

.

Une file d'attente est le stockage transitoire. Quelqu'un écrit, quelqu'un lit d'autre, et c'est tout.


Si vous voulez la fiabilité, lisez ceci: http://msdn.microsoft .com / fr-fr / bibliothèque / ms978430.aspx

Et ceci: http: //blogs.msdn. com / shycohen / archive / 2006/02/20 / 535717.aspx

Et ceci: http: //www.request-response.com/blog/PermaLink,guid,03fb0e40-b446-42b5-ad90-3be9b0260cb5.aspx

La fiabilité est une caractéristique de la file d'attente, pas votre application. Vous pouvez faire une « lecture récupérable ». Il est une opération qui fait partie de l'API de file d'attente.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top