2012-09-04 1 views
3

Non pas qu'il ne soit pas facile (ou amusant) d'en écrire un, il est logique de ne pas réinventer la roue pour ainsi dire. J'ai jeté un coup d'oeil autour de diverses tentatives, mais je ne semble pas avoir encore rencontré une implémentation qui supporte ces critères;Existe-t-il une bonne implémentation de File d'attente MongoDB pour le pilote C#?

Système OSS à file d'attente simple avec persistance MongoDB;

  • C# Driver (officiel) basé (si plein de sérialisation POCO)
  • curseurs tailable plutôt que l'interrogation
  • poignées délai d'attente de messages (correctement GC)
  • gère l'échec des consommateurs (crash idéalement détection re-insertion, mais avec délai d'attente retardée réinsertion est fine) si findAndModify sur
  • complète
  • plusieurs écrivains, plusieurs consommateurs
  • threadsafe

Agréable à avoir;

  • permet de (dernier seulement) message (remplacer les anciens messages dans le Q)

Si quelqu'un a une bibliothèque simple et agréable comme flottant autour sur GitHub que je ne l'ai pas encore trouvé, s'il vous plaît parler en haut!

Répondre

0

Voici mon petit projet - une implémentation de bus de messages .net qui fonctionne avec les files d'attente MS SQL ou MongoDB (le support de MongoDB est un ajout récent). Lien: http://code.google.com/p/nginn-messagebus/ et http://nginn.org/blog pour quelques exemples. Je ne sais pas si c'est ce que vous cherchez, il manque aussi de documentation et d'exemples de départements et cela ne correspond pas exactement à vos spécifications (sondage au lieu de tailing) - mais peut-être vaut-il mieux essayer. C'est un bus de messages de publication-abonnement, comme NServiceBus ou MassTransit - pas une file d'attente de messages bruts. PS Je crains que vos spécifications ne s'excluent mutuellement: vous ne pouvez pas utiliser le curseur de disponibilité avec des consommateurs concurrents car vous perdez de l'atomicité. Si vous voulez mettre en file d'attente, vous ne devez utiliser qu'un seul consommateur.

+0

En fait, vous avez probablement raison. Polling vs Tailing est un compromis relativement petit si vous voulez plusieurs lecteurs. Pour de nombreuses implémentations, même si un seul lecteur est probablement la bonne architecture dans tous les cas, il suffit de s'assurer que le processus de lecture est recyclé en cas d'erreur. Probablement une bonne chose d'utiliser des messages idempotents (permet une sémantique au moins une fois) et d'utiliser un timeout de message probablement combiné avec un processus de recyclage et un nombre de tentatives de message. – cirrus

Questions connexes