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

Pessoal, boa tarde.

Estou de volta com a segunda parte série dedicada ao Service Broker. Nesta segunda parte, vou trabalhar com alguns dos componentes que fazem parte da arquitetura do Service Broker, dentre eles:

– Tipos de Mensagens (Message Type);

– Contratos (Contracts);

– Filas (Queue); e

– Serviços (Services).

Então, mais uma vez seja bem – vindo, a 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.

 

Acredito que este breve resumo possa ter dado uma ideia do que o Service Broker realizado no SQL Server e de que forma podemos fazer uso deste recurso.

 

Dando continuidade, vamos começar nossa jornada nesta segunda parte da série, começando pela criação dos Tipos de Mensagens, antes de colocar a mão na massa ou melhor no código, vamos conhecer um pouco sobre os Tipos de Mensagens e qual a sua importância para o Service Broker.

Tipos de Mensagens

Para que seja possível realizar a comunicação, os aplicativos que fazem uso do Service Broker utilizam o conceito de mensagens através da função de envio e recebimento, algo muito similar ao e-mail. Os envolvidos no processo de troca de mensagens, são os responsáveis por concordar com a troca de conteúdo, como também, no reconhecimento do nome de cada mensagem.

O objeto tipo de mensagem define um nome para o tipo de mensagem e o tipo de dados que a mensagem deverá conter. Os tipos de mensagem persistem nos bancos de dados em que são criados. Você pode criar um tipo de mensagem idêntico em cada banco de dados que participa de uma conversação.

Cada tipo de mensagem é responsável em especificar a validação que o SQL Server deve executar para as mensagens, de acordo com o tipo de dados. O SQL Server pode verificar se a mensagem contém XML válido, se contém XML em conformidade com um determinado esquema ou se simplesmente não contém dados.

A validação é executada quando o serviço de destino recebe a mensagem, caso o conteúdo da mensagem não corresponda à validação especificada, o Service Broker retornará uma mensagem de erro ao serviço que enviou a mensagem.

Pois bem, nosso cenário será composto basicamente por dois tipos de mensagens:

  1. mtEnvioMensagem; e
  2. mtRecebimentoMensagem.

Para criarmos nossos Tipos de Mensagens, vamos utilizar o Bloco de Código 1, apresentado abaixo:

— Código 1 – Criando os Tipos de Mensagens –

Use MyDatabaseServiceBroker

Go

 

CREATE MESSAGE TYPE [mtEnvioMensagem]

VALIDATION = WELL_FORMED_XML

Go

 

CREATE MESSAGE TYPE [mtRecebimentoMensagem]

VALIDATION = WELL_FORMED_XML

Go

Note que estou especificando no argumento Validation, a opção = Well_FORMED_XML, isso vai indicar para o SQL Server que a nossa deverá conter em seu corpo um arquivo XML bem formatado como mecanismo de validação da mensagem.

A Tabela 1 apresentada abaixo, ilustra os tipos de mensagens existentes no Service Broker:

Argumentos

Descrição

NONE

 

Especifica que nenhuma validação é executada. O corpo da mensagem pode conter dados ou pode ser NULL.
EMPTY

 

Especifica que o corpo da mensagem deve ser NULL.
WELL_FORMED_XML

 

Especifica que o corpo da mensagem deve conter XML bem formado.
VALID_XML WITH SCHEMA COLLECTION Especifica que o corpo da mensagem deve conter XML que obedeça ao um esquema na coleção de esquemas especificada.

O schema_collection_name deve ser o nome de uma coleção de esquema XML existente.

Tabela 1 – Relação de argumentos existentes no comando Create Message Type.

Podemos observar a Figura 1 que ilustra a estrutura do nosso banco de dados, após a criação dos dois tipos de mensagens:

ServiceBroker-P2-Figura1

Caso você queria consultar a relação de mensagens criadas neste momento, utilize a System Table: Sys.Service_Message_Types

Nosso próximo passo é realizar a criação dos Contratos, vamos então conhecer um pouco sobre os Contratos e depois realizar a criação deste recurso.

Contratos

Um contrato define qual tipo de mensagem um aplicativo usa para realizar uma tarefa em particular. Um contrato é um acordo entre dois serviços sobre quais mensagens cada serviço visa realizar uma tarefa em particular.

O contrato especifica quais tipos de mensagem podem ser usados para realizar o trabalho desejado. O contrato também especifica qual participante na conversação pode usar cada tipo de mensagem.

O Service Broker também inclui um contrato interno denominado DEFAULT. Este contém somente o tipo de mensagem SENT BY ANY. Se nenhum contrato for especificado na instrução o Service Broker usará o contrato DEFAULT.

Para realizarmos a criação de um novo contrato, vamos utilizar o Bloco de Código 2 apresentado abaixo, observe que iremos utilizar o comando Create Contract, especificando o Tipo de Mensagem que será o Target e qual será Initiator.

— Código 2 – Criando contrato e definido o Target e Initiator —

Use MyDatabaseServiceBroker

Go

 

CREATE CONTRACT [cProcessaMensagens]

            ( mtEnvioMensagem] SENT BY initiator,

            [mtRecebimentoMensagem] SENT BY target);

Go;

Observe que defininos como initiator(inicializador) o mtEnvioMensagem e como Target(alvo) o mtRecebimentoMensagem, com isso, a partir do momento que dermos inicio o processo de diálogo, o Service Broker vai conseguir entender qual Tipo de Mensagem vai enviar e qual vai receber a mensagem.

A Figura 2 apresentada a seguir, ilustra a estrutura do nosso Banco de Dados MyDatabaseServiceBroker, após a criação do contrato cProcessaMensangens:

ServiceBroker-P2-Figura2

Figura 2 – Estrutura do Banco de Dados MyDatabaseServiceBroker, apresentando o contrato criado anteriormente.

Caso você queria consultar a relação de contratos criados neste momento, utilize a System Table: Sys.Service_Contracts

Neste momento, nosso banco de dados, apresenta em sua estrutura os seguintes componentes:

  • Tipos de Mensagem: mtEnvioMensagem e mtRecebimentoMensagem; e
  • Contrato: cProcessaMensagens.

Vamos evoluir mais um pouco na estrutura de nosso ambiente, fazendo agora a criação de outro recurso muito importante para que seja possível fazer uso do Service Broker, e de grande avalia para que as mensagens possam ser trocadas, este me referindo as QUEUE (Filas), mantendo a regra, vou apresentar os conceitos sobre Queue e em seguida o código que devemos utilizar para criar nossas filas.

QUEUE (Filas)

As Queues, ou filas, tem como função, possibilitar um canal de comunicação entre os envolvidos no processo de troca de mensagens, criando o chamado Enfileirador de mensagens.

Quando o Service Broker recebe uma mensagem de um serviço, ele a insere na fila desse serviço, desta forma, para receber as mensagens enviadas ao serviço, um aplicativo recebe mensagens da fila, possibilitando que o Service Broker gerencie e controle o fluxo de mensagens que esta sendo processadas em cada fila.

Durante o processamento das mensagens, as filas são preenchidas criando uma seqüência de linhas que representam as mensagens que estão sendo utilizadas.

A linha tem o conteúdo da mensagem e informações sobre o tipo de mensagem, o serviço pretendido pela mensagem, o contrato que a mensagem segue, a validação executada na mensagem, a conversação da qual a mensagem faz parte e as informações internas para a fila.

As filas não retornam mensagens em uma ordem restrita de primeiro a entrar, primeiro a sair; em vez disso, as filas retornam as mensagens para cada conversação na ordem em que as mensagens foram enviadas. Assim, um aplicativo não precisa incluir código para recuperar a ordem original das mensagens.

Seguindo em frente, vamos realizar a criação das filas que iremos utilizar em nosso ambiente, para isso criaremos duas filhas, denominadas: qOrigem e qDestino, utilizadas como canais de comunicação e enfileirados no processamento das mensagens, para tal, faremos uso do Bloco de Código 3, apresentado abaixo:

— Código 3 – Criando as Filas qOrigem e qDestino —

Use MyDatabaseServiceBroker

Go

 

CREATE QUEUE [qOrigem]

Go

 

CREATE QUEUE [qDestino]
Go

Se observarmos o processo de criação de uma fila é muito simples e sem qualquer tipo de segredos, muito pelo contrário, uma das características mais peculiares do Service Broker esta relacionada ao seu processo de configuração, realizado de forma muito clara, tranqüila e muito simplificada.

Temos neste momento, mais um componente criado em nosso banco de dados, conforme apresenta a Figura 3, que desta a forma que o Management Studio apresenta as filas criadas para nosso Service Broker:

ServiceBroker-P2-Figura3

Figura 3: Estrutura do Banco de Dados, apresentando as filas qOrigem e qDestino criadas anteriormente.

Caso você queria consultar a relação de filas criadas neste momento, utilize a System Table: Sys.Service_Queues

Nosso último componente que será criado para compor a estrutura do nosso Banco de Dados MyDatabaseServiceBroker, conhecido como Serviço, e como sua própria descrição apresenta, o Serviço será o elemento envolvido no processo de troca de mensagens realizada pela Service Broker.

Services (Serviços)

Elemento que compõem a arquitetura do um Service Broker, os serviços são definidos e tratados como tarefas que possuem uma finalidade específica, possibilitar a ocorrência de conversações (diálogos) no Service Broker. Através dos serviços, o Service Broker consegui realizar a entrega das mensagens para as filas de forma correta dentro de um banco de dados, rotear mensagens, impor o contrato para uma conversação e determinar a segurança remota de uma nova conversação.

Cada serviço especifica uma fila para conter as mensagens de entrada, fazendo uso dos contratos associados ao serviço que definem as tarefas específicas para as que o serviço aceite conversações novas.

Continuando pelo esta longa estrada, vamos realizar a criação dos nossos serviços, da mesma forma que realizamos para Filas, estaremos criando dois serviços denominados: sOrigem e sDestino, conforme apresenta o Bloco de Código 4 a seguir:

— Código 4 – Criação dos Serviços sOrigem e sDestino –

Use MyDatabaseServiceBroker

Go

 

CREATE SERVICE [sDestino] ON QUEUE [qDestino] ([cProcessaMensagens])

Go

 

CREATE SERVICE [sOrigem] ON QUEUE [qOrigem]

Go

Importante destacar, que o serviço sDestino esta vinculado com a fila qDestino e para este mesmo serviço especificamos que será utilizado o contrato cProcessaMensagens, desta maneira, ao fazer uso deste serviço o SQL Server deverá obrigatoriamente chamar o contrato cProcessaMensagens como elemente de validação e garantia do tipo de mensagem que esta sendo trocada.

A Figura 4, ilustra a estrutura do banco de dados MyDatabaseServiceBroker, após a criação dos nossos serviços:

ServiceBroker-P2-Figura4

Figura 4 – Estrutura do Banco de Dados MyDatabaseServiceBroker após a criação dos serviços sDestino e sOrigem.

Caso você queria consultar a relação de serviços configurado neste momento, utilize a System Table: Sys.Services.

———————————————————————————————————————————————————————-

Muito bem, todos os componentes estão criados, agora podemos começar a pensar a maneira que poderemos fazer uso destes recursos e realmente utilizar o poder do Service Broker, mas isso não será hoje, vou deixar este gostinho de quero mais para a próxima parte desta série.

Nossa caminhada será longa, mas conseguimos evoluir muito nesta segunda parte, o próximo passo é dar inicio aos processos que o Service Broker reconhece como conversações, fazendo uso de instruções como: Begin Dialog, Send e Receive.

Por enquanto é isso, vou ficando por aqui, 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.

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

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