Trabalhando com o Service Broker no Microsoft SQL Server 2008, 2008 R2 e 2012 – Parte I.

Pessoal, bom dia.

Tudo bem? Como de costume, sempre pensando em algum conteúdo que possa servir como base, para um novo artigo ou série, revirando o baú do Microsoft SQL Server, encontrei algo que eu particularmente utilizei em momentos específicos, mas foi de grande avalia, estou se referindo ao Service Broker (Serviço de Mensageria) introduzido no Microsoft SQL Server a partir da versão 2005.

Para começar esta nova aventura, vou abordar sobre esta funcionalidade e no decorrer das partes desta Série, vamos montar nosso ambiente de estudos e prática.

Então seja bem vindo á esta nova série dedicada ao Service Broker.

Introdução

Lançado em conjunto com o Microsoft SQL Server 2005, o Service Broker foi um dos grandes destaques desta versão do SQL Server, sendo tratado como uma das principais inovações do produto em 2005.

Desde então, muito se falou deste recurso que foi mantido e evoluído nas versões e edições posteriores do Microsoft SQL Server. Existente como recurso e funcionalidade do Mecanismo de Banco de Dados (Database Engine), o Service Broker fornece aos desenvolvedores e profissionais de banco de dados criarem aplicativos de enfileiramento e mensagens confiáveis para troca de dados no SQL Server. Basicamente através deste serviço é possível que uma aplicação conectada a uma única instância do SQL Server possa realizar a distribuição de trabalho e mensagens entre várias outras instâncias de banco de dados.

Através desta capacidade de troca de informações, o Service Broker estabeleceu uma forma assíncrona de comunicação entre os aplicativos de banco de dados que fazem uso desta funcionalidade, desta forma, o tempo de resposta para troca de informações é bem menor, mais interativo e simplificado, o que torna o uso deste recurso mais confiável.

Além disso, o Service Broker fornece a troca de mensagens confiáveis entre instâncias de bancos de dados distribuídas em uma corporação, ajudando os desenvolvedores a compor aplicativos estruturados ou reconhecidos como serviços independentes, fazendo uso da mesma instância de comunicação.

Por padrão o Service Broker, utiliza o protocolo TCP/IP e seu conjunto de protocolos existentes para a troca de mensagens, contendo recursos que podem impedir a qualquer momento o acesso não autorizado a uma rede, estabelecendo padrões para criptografia de mensagens enviadas pelos aplicativos entre as instâncias do SQL Server.

 

Como funciona o Service Broker

Como seu objetivo é criar uma forma simplificada, segura e desacoplada de troca de mensagens, o Service Broker possui um conjunto de tarefas necessárias para se realizar este processo de mensageria, entre os aplicativos e instâncias de Servidores de Banco de Dados. A arquitetura do Service Broker é composta pelos seguintes componentes, tarefas e características:

  • Conversações;
  • Ordenação e coordenação de mensagens;
  • Programação assíncrona transacional;
  • Suporte para aplicativos acoplados de forma flexível; e
  • Componentes do Service Broker.

 

A seguir descrevo esta arquitetura, destacando de forma resumida cada tarefa.

Conversação

Projetado como recurso básico para envio e recebimento de mensagens o Service Broker, apresenta uma tarefa chamada “Conversação” realizada durante o processo de troca de mensagens. Cada tarefa conversação é reconhecida e tratada como canal de comunicação confiável e persistente, as mensagens apresentam um tipo específico de conversa que tratada pelo Service Broker individualmente que possibilita reforçar e garantir a segurança na gravação dos dados trocados pelos aplicativos.

Durante esta troca de mensagens, a tarefa de “Conversação” permite que os aplicativos envolvidos neste processo estabelece este canal de comunicação dentro de uma “fila” que representa uma exibição de uma tabela interna relacionada com o banco de dados que o Service Broker esta fazendo uso.

Para cada conversação tratada pelo Service Broker é estabelecida uma sequência e ordenação das Mensagens através da tarefa “Ordenação e Coordenação de Mensagens”, isso garante que cada mensagem faça parte de uma única e exclusiva conversa, ou seja, a mesma mensagem trocada será tratada pela mesma tarefa e conversação.

Uma maior simples de se representar e ilustrar o funcionamento do Service Broker é pensar como funciona 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.

A Figura 1 apresenta o processo de troca de mensagens, com base, em um Serviço Postal.

servicebroker1

 

Figura 1: Representação do processo de troca de mensagens realizada pelo Service Broker.

Ao analisar o funcionamento do Service Broker, podemos entender que os programas envolvidos neste cenário, devem entender que este serviço terá a sua forma de atuação similar ao Serviço Postal ou Correios, dando total suporte as mensagens assíncronas trocadas entre os aplicativos.

As mensagens do Service Broker funcionam como cartas. O serviço Service Broker é tratado como 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.

Observação: Enquanto existir um processo de troca de mensagens através do Service Broker, o processo de fila estará sendo mantido e alimentado até que o aplicativo receptor dos dados seja capaz de tratar estas mensagens, enquanto isso não ocorrer à fila de mensagens terá o seu tamanho aumentado e seu processo de enfileiramento expandido.

 

Ordenação e Coordenação de Mensagens

Todo processo de controle e manutenção das filas de mensagem é realizada pelo Service Broker diretamente no Mecanismo de Banco de Dados (Database Engine), adotando um tratamento tradicional através de dois aspcetos:

  • As filas gerenciadas pelo Service Broker são integradas diretamente com o banco de dados ao qual o serviço esta envolvido.
  • As filas são responsáveis por coordenar e ordenar as mensagens que estão em transito.

Através do forte controle de envio e recebimento de mensagens, a tarefa de “Ordenação e Coordenação de mensagens” estabelece ao Service Broker garantias no fluxo de troca de mensagens, estabelecendo dois lados no processo de comunicação, denominados:

  • Lado de inicio chamado de iniciador; e
  • Lado de destino da mensagem chamado de receptor.

Um processo básico de troca de mensagens do Service Broker consiste em:

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 receptor:
    • 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.

Até o final do envio e recebimento de mensagens este ciclo se repete de forma cíclica e continua.

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

Programação assíncrona transacional

O componente “Programação assíncrona transacional”, esta totalmente relacionada com a infraestrutura de funcionamento do Service Broker, servindo como uma área de transferência de mensagens, tratada cada processo de forma transacional, o que permite que a mesma seja revertida em qualquer momento.

Neste componente o Service Broker, realiza o controle dos dados que estão sendo trocados, estabelecendo um processo de escalabilidade, o que garante que o serviço possa ser automatizado e cresça de acordo com a situação, uma delas é a capacidade de ocorrer à inicialização automática dos processas que realizam o processamento de uma fila, com isso é possível que a aplicação que esteja fazendo uso do processo de envio/recebimento identificar o momento em que a mensagem encontra-se em execução ou na fila de processamento.

A programação assíncrona permite que os desenvolvedores elaborem soluções de software capazes de gravar dados em filas de mensagem, fazendo uso do próprio banco de dados através de uma ou mais tabelas como repositórios internos de filas de mensagens.

Suporte para aplicativos acoplados de forma flexível

Considerada como uma característica e não um componente ou tarefa, o “Suporte para aplicativos acoplados de forma fléxivel”, garante e possibilita ao Service Broker trabalhar com um conjunto bem distinto de aplicativos independentes que podem ser identificados como possíveis componentes de troca de mensagem. Estes aplicativos devem conter internamente a mesma estrutura e mecanismo para troca de mensagens existente no Service Broker, o que permite em algumas situações que este componente seja acoplado ao serviço de mensageria.

Componentes do Agente de Serviços

O Service Broker é composto por três componentes básicos, existentes de acordo com a tarefa que esta em execução:

  • Componentes de conversação: Conhecido como diálogo, é qualquer conversação realizada através do Service Broker durante o processo de troca de mensagens, permitindo que grupos de conversões, conversas e mensagens possam ser tratadas por seus aplicativos estabelecendo os participantes.
  • Componentes de definição de serviço: Responsável por estabelecer o fluxo da conversação, o armazenamento de dados em um banco de dados, este componente define a estrutura básica de conversação realizada entre o Service Broker e o aplicativo.
  • Componentes de rede e segurança: Através deste componente o Service Broker permite aos administradores de banco de dados realizem o gerenciamento de seus ambientes sem gerar impactos no código fonte da aplicação, focando alterações ou mudanças de cenário, estabelecendo um canal de troca de mensagens de forma segura e confiável, para os aplicativos que estão consumindo o Service Broker.

Observação: 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.

Bom, após esta longa caminhada, vou colocar um pouco de pimenta neste molho, começando a criação do nosso ambiente de estudos, através do Codigo 1 apresentado abaixo:

— Código 1 – Criando o Banco de Dados MyDatabaseServiceBroker —

Use Master

Go

 

1 – Criação do banco de dados

CREATE DATABASE MyDatabaseServiceBroker

Go

 

2 – Ativação do recurso de Service Broker

ALTER DATABASE MyDatabaseServiceBroker

SET ENABLE_BROKER

Go

 

3- Verificação do Status

SELECT Name, is_broker_enabled FROM sys.databases

WHERE Name = ‘MyDatabaseServiceBroker’

Go

Observe que após criarmos o banco de dados, utilizamos o comando Alter Database através da diretiva Set Enable_Broker para ativar e indicar para o SQL Server que este banco de dados deverá permitir o uso do serviço de mensageria.

Observações:

  • Para executar o ENABLE_BROKER o SQL Server solicita um bloqueio de banco de dados exclusivo. Se outras sessões bloquearam recursos no banco de dados, ENABLE_BROKER esperará até que as outras sessões liberem os bloqueios.
  • Para habilitar o Service Broker em um banco de dados de usuário, verifique se nenhuma outra sessão está usando o banco de dados antes de executar a instrução ALTER DATABASE SET ENABLE_BROKER, por exemplo, colocando o banco de dados no modo de usuário único.

Em seguida executamos comando Select para validar o status da coluna Is_Broker_Enabled existente na System Table Sys.Databases, que deverá retornar o valor de 1 para esta coluna, o que garante que o Service Broker esta configurado de forma correta.

Perfeito, nossa caminhada será longa, como você pode observar o Service Broker é um serviço que apresenta uma arquitetura única e exclusiva, componente por uma série de componentes, tarefas e características que somadas constituem o funcionamento e propriamente o Serviço de Mensageria.

No decorrer desta série, vamos trabalhos com os tipos de mensagens, contratos, filas e serviços relacionados com este recurso.

Agradeço a sua atenção e visita ao meu blog.

Nos encontramos em breve.

Um grande abraço.

Até mais.

Autor: Junior Galvão - MVP

Profissional com vasta experiência na área de Tecnologia da Informação e soluções Microsoft. Graduado no Curso Superior em Gestão da Tecnologia de Sistemas de Informação pela Uninove - Campus São Roque. Pós-Graduado no Curso de Gestão e Engenharia de Processos para Desenvolvimento de Software com RUP na Faculdade FIAP - Faculdade de Informática e Administração Paulista de São Paulo. Pós-Graduado em Gestão da Tecnologia da Informação Faculdade - ESAMC Sorocaba. Cursando Mestrado em Ciências da Computação - UFSCar - Campus - Sorocaba. Formação MCDBA Microsoft, autor de artigos acadêmicos e profissionais postados em Revistas, Instituições de Ensino e WebSistes. Meu primeiro contato com tecnologia ocorreu em 1995 após meus pais comprarem nosso primeiro computador, ano em que as portas para este fantástico mundo se abriram. Neste mesmo ano, comecei o de Processamento de Dados, naquele momento a palavra TI não existia, na verdade a Tecnologia da Informação era conhecida como Computação ou Informática, foi assim que tudo começou e desde então não parei mais, continuando nesta longa estrada até hoje. Desde 2001 tenho atuado como Database Administrator - Administrador de Banco de Dados - SQL Server em tarefas de Administração, Gerenciamento, Migração de Servidores e Bancos de Dados, Estratégias de Backup/Restauração, Replicação, LogShipping, Implantação de ERPs que utilizam bancos SQL Server, Desenvolvimento de Funções, Stored Procedure, Triggers. Experiência na Coordenação de Projetos de Alta Disponibilidade de Dados, utilizando Database Mirroring, Replicação Transacional e Merge, Log Shipping, para versões: 2000, 2005, 2008, 2008 R2, 2012 e 2014. Atualmente trabalho como Administrador de Banco de Dados no FIT - Instituto de Tecnologia da Flextronics, como também, Consultor em Projetos de Tunnig e Performance para clientes. Desde 2008 exerço a função de Professor Universitário, para as disciplinas de Banco de Dados, Administração, Modelagem de Banco de Dados, Programação em Banco de Dados, Sistemas Operacionais, Análise e Projetos de Sistemas, entre outras. Possuo titulação Oficial Microsoft MVP - SQL Server renovada desde 2007.

2 comentários em “Trabalhando com o Service Broker no Microsoft SQL Server 2008, 2008 R2 e 2012 – Parte I.”

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s