Qual a função do Service Broker?

O Service Broker ajuda os desenvolvedores a criar aplicativos assíncronos, livremente acoplados nos quais os componentes independentes trabalham em conjunto para realizar uma tarefa. Esses componentes de aplicativo trocam mensagens que contêm as informações necessárias para concluir a tarefa. Este tópico descreve os seguintes aspectos do Service Broker:

  • Conversações

  • Ordenação e coordenação de mensagens

  • Programação assíncrona transacional

  • Suporte para aplicativos acoplados de forma flexível

  • Componentes do Service Broker

Conversações

O Service Broker é projetado com base em funções básicas de enviar e receber mensagens. Cada mensagem é parte de uma conversação. Cada conversação é um canal de comunicação confiável e persistente. Cada mensagem e cada conversação têm um tipo específico que o Service Broker reforça para ajudar os desenvolvedores a gravarem aplicativos seguros.

Novas instruções Transact-SQL permitem que os aplicativos enviem e recebam essas mensagens de forma segura. Um aplicativo envia mensagens a um serviço, que é um nome para um conjunto de tarefas relacionadas. Um aplicativo recebe mensagens de uma fila, que é uma exibição de uma tabela interna.

Mensagens para a mesma tarefa fazem parte da mesma conversação. Em cada conversação, o Service Broker garante que um aplicativo receba cada mensagem exatamente uma vez, na ordem em que foi enviada. O programa que implementa um serviço pode associar conversações relacionadas para o mesmo serviço em um grupo de conversação, conforme descrito em Vantagens do Service Broker.

Segurança com base em certificado ajuda a proteger mensagens confidenciais e controla o acesso aos serviços. Uma analogia é pensar no Service Broker como um serviço postal. Para manter uma conversação com um colega distante, você pode comunicar enviando cartas pelo serviço postal. O serviço postal classifica e entrega as cartas. Você e seu colega então recuperam as cartas das caixas postais, lêem, escrevem as respostas e enviam novas cartas até que a conversação termine. A entrega da carta acontece de forma assíncrona enquanto você e seu colega lidam com outras tarefas.

Dois usuários trocam mensagens por meio de um serviço postal.

Os programas podem usar o Service Broker como um serviço postal para dar suporte a conversações assíncronas com outros programas. As mensagens do Service Broker funcionam como cartas. Um serviço Service Broker é o endereço onde a agência postal entrega as cartas. As filas são as caixas postais que mantêm as cartas depois que elas são entregues. Os aplicativos recebem as mensagens, agem nas mensagens e enviam as respostas.

Quando um aplicativo envia uma mensagem para um serviço Service Broker, ela é separada dos detalhes de implementação do aplicativo na outra extremidade da conversação. O aplicativo que recebe pode ser dinamicamente reconfigurado ou substituído por um novo código sem afetar o aplicativo que envia. O aplicativo que recebe pode até mesmo ser desativado temporariamente; o único impacto será que o Service Broker continuará adicionando novas mensagens à fila até que o aplicativo receptor seja reiniciado.

Ordenação e coordenação de mensagens

O Service Broker controla a fila, uma técnica de programação de banco de dados comum, diferentemente dos produtos tradicionais em dois aspectos fundamentais:

  • As filas do Service Broker são integradas no banco de dados.

  • As filas coordenam e ordenam as mensagens relacionadas.

Fila integrada significa que a manutenção e administração regular do banco de dados também inclui o Service Broker. Normalmente um administrador não tem nenhuma tarefa de manutenção rotineira relacionada ao Service Broker.

A estrutura do Service Broker fornece uma interface Transact-SQL de envio e recebimento de mensagens combinada com um conjunto de fortes garantias de entrega e processamento de mensagens. O Service Broker garante que um programa receba cada mensagem em uma conversação exatamente uma vez na ordem em que foi enviada, não na ordem em que foi inserida na fila. Produtos de fila tradicionais fornecem mensagens na ordem em que foram inseridas na fila. Isso requer um aplicativo para determinar a ordem e o agrupamento das mensagens. O Service Broker garante que dois leitores de fila não possam processar mensagens da mesma conversação ou do mesmo grupo de conversações relacionadas simultaneamente.

Cada conversação do Service Broker tem dois lados. O lado que inicia a conversação é chamado iniciador; o outro lado é chamado destino. Cada lado tem um serviço; o serviço iniciador e o serviço de destino. Cada serviço tem uma fila de mensagem associada.

Abaixo, uma ilustração da troca de mensagens em um diálogo típico:

  • No iniciador:

    • Um programa começa a conversação.

    • O programa cria uma mensagem que contém os dados necessários para executar uma tarefa.

    • O programa envia a mensagem ao serviço de destino.

  • No destino:

    • A mensagem é colocada na fila associada ao serviço de destino.

    • Um programa recebe a mensagem da fila e executa o trabalho.

    • O programa responde enviando uma mensagem ao serviço iniciador.

  • No iniciador:

    • A mensagem de resposta é colocada na fila associada ao serviço iniciador.

    • Um programa recebe a resposta e a processa.

Esse ciclo se repete até que o iniciador termine a conversação porque não tem mais solicitações a enviar ao destino.

O Service Broker oferece suporte a prioridades de configuração de 10 (alto) a 1 (baixo) para cada conversação. Isso assegura que o trabalho de prioridade baixa não bloqueie o trabalho de prioridade alta. Os sistemas do Service Broker podem ser configurados para oferecer vários níveis de serviço. Para obter mais informações, consulte Prioridades de conversação.

O Service Broker controla as tarefas mais difíceis envolvidas na gravação de aplicativos de mensagens. Essas tarefas difíceis incluem a coordenação da mensagem, a entrega segura da mensagem, o bloqueio e a inicialização de leitores de fila. Isso permite que os desenvolvedores de banco de dados se concentrem em como resolver problemas de negócios.

Programação assíncrona transacional

Na infra-estrutura do Service Broker, a entrega de mensagem entre aplicativos é transacional e assíncrona. Como a transferência de mensagens do Service Broker é transacional, se uma transação for revertida, todas as operações do Service Broker na transação serão revertidas. Isso inclui operações de envio e recebimento. Na entrega assíncrona, o Mecanismo de Banco de Dados controla a entrega enquanto o aplicativo continua em execução. Para aprimorar a escalabilidade, o Service Broker fornece mecanismos para iniciar automaticamente programas que processam uma fila, quando há trabalho útil a ser efetuado pelo programa. Para obter mais informações, consulte Ativação do Service Broker.

Programação assíncrona ajuda os desenvolvedores a gravar aplicativos que usam fila. Muitos aplicativos de banco de dados incluem tabelas que funcionam como filas de trabalho a ser realizado quando assim permitirem os recursos. As filas podem entregar dois benefícios a aplicativos de banco de dados:

  • Um aplicativo pode responder imediatamente a um usuário interativo depois de colocar sua solicitação de trabalho em uma fila. O aplicativo não precisa esperar que todo o trabalho associado à solicitação seja concluído antes de responder. A solicitação enfileirada será processada quando os recursos estiverem disponíveis. Isso permite que o banco de dados continue respondendo a usuários interativos e use eficientemente os recursos disponíveis.

  • O trabalho envolvido em uma única solicitação pode, às vezes, ser dividido em várias unidades de trabalho, processadas como transações separadas. Nesse caso, um aplicativo de banco de dados pode iniciar cada unidade de trabalho colocando uma solicitação em uma fila. O Agente de Serviços estende essa idéia, permitindo que os aplicativos se espalhem em várias instâncias do Service Broker em computadores separados.

A codificação de aplicativos para ordenar e processar os itens corretamente é freqüentemente complicada. Os desenvolvedores podem usar a funcionalidade do Service Broker incorporada ao Mecanismo de Banco de Dados para simplificar a codificação necessária para implementar com sucesso as filas de bancos de dados.

Suporte para aplicativos acoplados de forma flexível

O Service Broker oferece suporte a aplicativos acoplados de forma flexível. Aplicativos acoplados de forma flexível são compostos de vários programas que enviam e recebem mensagens independentemente um do outro. Tais aplicativos devem conter as mesmas definições de mensagens de troca e devem definir a mesma estrutura geral para a interação entre os serviços. No entanto, os aplicativos não precisam ser executados ao mesmo tempo, na mesma instância do SQL Server ou compartilhar detalhes de implementação. Um aplicativo não precisa saber o local físico ou a implementação do outro participante na conversação.

Componentes do Agente de Serviços

O Service Broker tem três tipos de componentes:

  • Componentes de conversação. Grupos de conversação, conversações e mensagens formam a estrutura em tempo de execução de um aplicativo Service Broker. Aplicativos trocam mensagens como parte de uma conversação. Cada conversação faz parte de um grupo de conversação e um grupo de conversação pode conter várias conversações. Cada conversação do Service Broker é um diálogo. Um diálogo é uma conversação onde exatamente dois participantes trocam mensagens. Para obter mais informações sobre componentes de conversação, consulte Arquitetura da conversação.

  • Componentes de definição de serviço. Esses são componentes de design que especificam a estrutura básica das conversações que o aplicativo usa. Eles definem o tipo de mensagem para o aplicativo, o fluxo da conversação para o aplicativo e o armazenamento do banco de dados para o aplicativo. Para obter mais informações sobre componentes de definição, consulte Arquitetura de Serviço.

  • Componentes de rede e segurança. Esses componentes definem a infra-estrutura usada para trocar mensagens entre instâncias do Mecanismo de Banco de Dados. Para ajudar os administradores de banco de dados a gerenciar ambientes alterados, o Service Broker permite que os administradores configurem esses componentes independentemente do código de aplicativo. Para obter mais informações sobre componentes de rede e segurança, consulte Segurança de rede e remota.

Componentes de definição de serviço, componentes de rede e componentes de segurança são parte dos metadados do banco de dados e da instância do SQL Server. Grupos de conversação, conversações e mensagens fazem parte dos dados que o banco de dados contém.