2009-05-08 13 views
0

Je suis un développeur web débutant assis sur un projet d'application web ambitieux.sql service broker question de fonctionnalité

Ainsi, après avoir fait quelques recherches, j'ai découvert SQL Service Broker. Il semble que quelque chose que je pourrais utiliser, mais je ne suis pas sûr. Puisque l'apprentissage exige que quelqu'un consacre beaucoup de temps, je voulais être sûr que cela correspondrait à mes besoins.

J'ai besoin de mettre en place un système où les utilisateurs du site peuvent soumettre un texte sur le site. Ce flux de messages doit être redondant et géré de manière FIFO, avec à l'autre bout du flux un autre groupe d'utilisateurs traitant les messages.

Maintenant, un message qui est lu par un de ce dernier groupe d'utilisateurs, doit être verrouillé afin que personne d'autre ne peut le lire en même temps. L'utilisateur peut alors décider de gérer le message ou non. Ce n'est que s'il décide de traiter le message qu'il peut être supprimé de la file d'attente. S'il décide qu'il ne veut pas traiter le message, le message doit être remis dans la file d'attente (à la fin de la file, ou au moins avec la plus haute priorité), afin qu'un autre utilisateur puisse le lire et décider .

Est-ce quelque chose que je pourrais implémenter avec SQL Service Broker? Suis-je sur la mauvaise piste?

Merci!

+0

Pouvez-vous également expliquer pourquoi vous pensez que Service Broker peut vous aider avec ceci? Pour que les gens vous disent si vous êtes sur la bonne voie ou non, vous devez leur dire sur quelle piste vous êtes, pas seulement votre destination. ;-) – Tomalak

+0

La façon dont je le comprends, tout système de mise en file d'attente pourrait m'aider avec cela. J'ai regardé les alternatives, et comme ils font tous fondamentalement la même chose, j'ai choisi SSB. FIFO, 1: 1 livraison de message, redondance, verrouillage, asynchronité, performances de charge lourde .. tout correspond à la facture. Je ne suis pas sûr qu'un message, une fois lu par un utilisateur, puisse être remis dans la file d'attente avec la plus haute priorité (comme si elle n'avait jamais été lue). Ai-je mal compris votre question? :) Je voudrais mettre en place un système de questions-réponses 1: 1 (humain). Si j'utilise un système de file d'attente de messagerie existant, je n'aurais pas à coder moi-même. –

+0

«Remettre dans la file d'attente» signifierait essentiellement «renvoyer le message», ou ne pas le retirer de la file d'attente en jetant simplement un coup d'œil au lieu de recevoir. Comme la SSB assure la livraison des messages «dans l'ordre», je doute qu'il existe un moyen de «remettre un message» autre que de le mettre à nouveau en file d'attente, à la fin. Cela semble utile: http://www.simple-talk.com/sql/learn-sql-server/service-broker-foundations-workbench/ – Tomalak

Répondre

1

OMI, la meilleure utilisation du Service Broker est pour la connexion à l'application indépendante de manière à couplage lâche. Ce que je veux dire par là, c'est que les systèmes liés de cette manière peuvent communiquer à travers un ensemble de types de messages mutuellement acceptés. Ceci contrairement à une application qui manipule directement la base de données de l'autre, par exemple.

D'après ce que vous avez dit, je mettre en œuvre comme une table simple, par exemple: créer une table de message avec une PK identité, un drapeau d'allocation et vos colonnes personnalisées. Chaque fois qu'un opérateur veut récupérer le dernier message, obtenez la valeur PK la plus faible pour laquelle Allocation = 'N' et mettez à jour l'allocation à 'Y'. Ceci en une seule transaction. Lorsque/si l'opération décide de renvoyer le message en file d'attente, définissez simplement AllocationFlag sur 'N' et son retour.

Ceci est juste un exemple. La base de données dans ce cas vous fournit la cohérence, la charge lourde, etc.

Derrière les écrans, toutes les données que vous soumettez à la SSB sont stockées et manipulées sous forme de tables, il n'y a donc aucune raison pour qu'elles soient nécessairement plus rapides qu'une base de données Solution .

+1

merci pour votre réponse, il est ce que je soupçonnais.Je pensais juste qu'il serait peut-être plus sûr d'utiliser la SSB, car elle a été conçue par des spécialistes avec des files d'attente en tête + je n'étais pas sûr à 100% de mes propres compétences en programmation :) –