Question

Je construis actuellement deux services Windows:

  • Le premier prend les messages d'une connexion Internet et les insère dans une base de données. Ceci est conçu pour être rapide et stable et ne permet aucun autre traitement.

  • Le second effectue un traitement par lots avec tous les nouveaux messages arrivés depuis sa dernière exécution.

J'essaie de trouver un moyen de faire en sorte que le second service n'exécute son traitement par lots que lorsque les nouveaux messages sont prêts à être traités. Si le second service est erroné, le premier service continue, et inversement. Pour le moment, il utilise une boucle toutes les 5 secondes.

Je pense actuellement à utiliser une file d'attente de messages, où le premier service écrit un message uniquement si la file d'attente est vide et le second service verra si la file d'attente contient des messages, sinon passera dans une attente asynchrone jusqu'à ce qu'un message arrive et ensuite supprimer le message et exécuter. Par conséquent, l’utilisation de la file d’attente n’est pas vraiment une file d’attente, mais bien un commutateur binaire qui déclenche un événement sur le deuxième service lorsqu’il change d’état.

Je suppose qu'il existe un meilleur moyen de le faire que je n'ai pas rencontré. Est-ce que quelqu'un pourrait me diriger dans la bonne direction?

Était-ce utile?

La solution

En fait, voici comment vous EXACTEMENT le mettre en œuvre pour obtenir ces résultats. Avec MSMQ, vous n'avez pas à vérifier si un message a été écrit dans la file d'attente, le premier service écrit simplement dans la file d'attente, et le deuxième service le lit pour le traiter (lorsqu'il est actif). / p>

L'intérêt d'utiliser MSMQ réside dans le fait que l'un ou l'autre service peut être indisponible, mais les files d'attente seront actives, vous pourrez donc poursuivre le traitement.

Autres conseils

Il me semble que, dans ce cas, tout ce dont vous avez besoin est un espace de courrier. Le premier service stocke dans la base de données, puis envoie un & Quot; travail à faire & Quot; message. L'autre n'attend que les messages entrants.

MSMQ est un peu lourd pour quelque chose d'aussi simple. Là encore, vous pouvez simplement utiliser MSMQ et vous débarrasser de cette base de données également. Ce serait le moyen de le faire.

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