Estou projetando um sistema para vários usuários enfileirarem suas solicitações para um serviço da Web que recebe solicitações como criação de novas entradas, alteração de entradas, solicitação de dados. Muitas das chamadas de serviço da Web que usaremos usam dados hierárquicos como parâmetros (hierarquias projetadas para corresponder a estruturas de objeto c#), enquanto outras, como uma solicitação para a lista de tipos de entrada permitidos, não requerem parâmetros. A fila é necessária porque o serviço da web tem um requisito de limitação de 5 segundos ou mais, e apenas um login de serviço da web será usado por vários usuários.
xml Os dados retornados do serviço da Web eventualmente voltarão, serão analisados por nosso próprio aplicativo de servidor e inseridos em uma tabela de resposta de algum tipo para que o aplicativo do usuário possa saber que a solicitação foi recebida e também obter os dados retornados.
imagem básica é
aplicativo de usuário (vários usuários) --> fila de solicitação de serviço <--> aplicativo de servidor <--> serviço da web
e as respostas voltando da mesma forma
aplicativo do usuário (vários usuários) <-- fila de resposta do serviço <--> aplicativo do servidor <--> serviço da web
Estou criando o aplicativo de usuário e o aplicativo de servidor sozinho, e apenas tentando entender como projetar a fila de solicitação de serviço e as filas de resposta que usarão o sql server e tentando descobrir quantas tabelas essas filas terão desde solicitações e respostas vêm em forma hierárquica (diferentes tipos de hierarquia também são retornados, dependendo da solicitação), e ambas não hierárquicas.
Objetos como esses são especificados pela API de serviço da web externo. Os usuários estão enviando diferentes tipos de solicitações em diferentes formas relacionadas dessa estrutura de objeto, que serão armazenadas no sistema/filas de filas e, em seguida, coletadas pelo aplicativo do servidor para desenfileiramento para atender a um requisito de limitação para o serviço da web. O aplicativo do servidor também pode cancelar solicitações irrelevantes, como se muito tempo tiver passado e ele suspeitar de uma solicitação com falha ou não relevante, ou se o aplicativo do usuário não estiver sincronizado com o fluxo de dados do serviço da web.
Alguém tem algum exemplo simples de filas de vários usuários do servidor SQL usadas para essa finalidade? Existe algum bom livro sobre este tema? ou tutorial na web, talvez? parece necessário para limitar vários usuários de qualquer serviço da web ...
Fiz exatamente isso como um projeto em 2008-2009, um serviço da web (faturamento) que precisava lidar com mais de 1 milhão de chamadas por dia. Usei a tabela do SQL Server como uma fila, e a lição desse projeto foi resumida no artigo Using Tables as Queues . Atenha-se às regras que descrevo aqui e, especialmente, não tente adicionar apitos e sinos à sua mesa, use-a exclusivamente como uma fila. Sob carga, descobri que um problema crítico era desenfileirar em lote (retirar da fila 100 solicitações de chamada de serviço da web em uma operação de banco de dados) e lidar com o envio no aplicativo (colocar a solicitação de desenfileiramento em uma lista de memória, fazer com que os manipuladores de chamadas da web façam o trabalho desta lista). Fazer a chamada de serviço web assíncrona é crítico. Além disso, você deve ler sobre o
ServicePointManager.DefaultConnectionLimit
.Você já pensou em usar o recurso interno " Service Broker " do SQL Server? Ele foi projetado para ajudar os desenvolvedores a implementar sistemas assíncronos e enfileirados.