Je concevons un système pour plusieurs utilisateurs pour faire la queue de leurs demandes à un service Web qui prend des demandes telles que la création de nouvelles entrées, la modification des entrées, la demande de données. De nombreux appels de service Web Nous utiliserons des données hiérarchiques comme paramètres (héritirarchies conçues pour correspondre à des structures d'objet C #), tandis que d'autres telles qu'une demande de liste des types d'entrée admissibles ne nécessitent aucun paramètre. La file d'attente est nécessaire car le service Web dispose d'une exigence de 5 seconde ou plus d'étranglement, et un seul identifiant de service Web sera utilisé par plusieurs utilisateurs.
les données XML renvoyées à partir du service Web reviennent éventuellement, seront analysées par notre propre application serveur, et insérées sur une table de réponses de certains types afin que l'application utilisateur puisse connaître la demande a été reçue et obtenez également toutes les données renvoyées.
image de base est
application utilisateur (utilisateurs multiples) -> Queue de demande de service <-> Application de serveur <-> Service Web
et les réponses revenant de la même manière
application utilisateur (utilisateurs multiples) <- File d'attente de réponse du service <-> App <-> Service Web
Je crée l'application utilisateur et l'application de serveur moi-même et j'essaie simplement d'obtenir une poignée sur la façon de concevoir les files d'attente de la file d'attente et de la réponse de la demande de service qui utilisera SQL Server et d'essayer de comprendre le nombre de tables de ces files d'attente. Les demandes et les réponses se présentent sous forme hiérarchique (des types de hiérarchie différents sont renvoyés aussi bien selon la demande), une forme non hiérarchique à la fois.
Des objets tels que ceux-ci sont spécifiés par l'API de service Web externe. Les utilisateurs envoient différents types de demandes de différentes formes associées de cette structure d'objet, qui va être stockée dans le système/files d'attente de la file d'attente, puis ramassée par l'application Server pour déroger à une exigence d'accélérateur pour le service Web. L'application Server peut également annuler des demandes non pertinentes, telles que si trop de temps s'est écoulée et soupçonne une demande défectueuse ou non pertinente, ou comme si l'application utilisateur n'est pas synchronisée avec le flux de données à partir du service Web.
Quelqu'un a-t-il un exemple simple de files d'attente de serveur SQL multiple utilisées à cet effet? Y a-t-il un bon livre sur ce sujet? ou tutoriel web peut-être? Semble nécessaire pour étrangler plusieurs utilisateurs de tout service Web ...
J'ai fait exactement cela en tant que projet en 2008-2009, un service Web (facturation) qui devait gérer des appels de 1 M + par jour. J'ai utilisé la table SQL Server comme une file d'attente et la leçon de ce projet que j'ai distillé dans l'article tilisation de tableaux comme files d'attente . S'en tenir aux règles que je posais et n'essayez particulièrement d'ajouter des sifflets ni des cloches à votre table, utilisez-le exclusivement comme une file d'attente. Sous la charge, j'ai constaté qu'un problème critique était de lot dequeuse (demande d'appel de service Web de Dequeue 100 dans une opération de base de données) et de gérer l'envoi de l'application (placez la requête de DEQUUE dans une liste de mémoire dans une liste de mémoire, demandez aux gestionnaires d'appel Web. de cette liste). Faire l'appel de service Web ASYNC est essentiel. En outre, vous devez lire sur le ServicePointManager.DefaultConnectionLimit
.
Avez-vous envisagé d'utiliser les serveurs SQL intégrés "- Broker Service Broker "? Il est conçu pour aider les développeurs à mettre en œuvre des systèmes asynchrones à la file d'attente.