Criando objetos do Service Broker

Um aplicativo usa o Service Broker executando instruções do Transact-SQL que funcionam em objetos do Service Broker definidos em um banco de dados. Esta seção descreve considerações gerais quando você cria objetos do Service Broker para um aplicativo.

Visão geral

Os objetos do Service Broker definem os metadados e o armazenamento para um conjunto específico de tarefas:

  • Tipos de mensagem definem os dados que são trocados em uma conversação.

  • Contratos definem tarefas. Cada contrato especifica os tipos de mensagem que podem ser usados em uma conversação específica e qual lado da conversação pode enviar a mensagem.

  • Uma fila armazena mensagens de entrada para um serviço.

  • Um serviço representa um conjunto relacionado de tarefas comerciais. O nome do serviço também é usado para localizar a fila para o serviço.

Note que um contrato depende de um ou mais tipos de mensagem. Um serviço depende de uma fila e pode depender de um ou mais contratos. Portanto, os contratos são criados depois dos tipos de mensagem e descartados antes dos tipos de mensagem. Serviços são criados depois de filas e contratos e descartados antes de filas e contratos.

Criando objetos para um serviço

O procedimento para criar um serviço segue a mesma estrutura básica independentemente se o seu serviço ser inicial, de destino ou ambos.

A definição de um serviço especifica os contratos para os quais o serviço pode ser um destino. Por outro lado, um aplicativo pode usar um serviço para iniciar uma conversação que usa qualquer contrato definido no banco de dados. O Service Broker assume essa abordagem para aplicar a regra geral de que um serviço deve receber somente mensagens que o aplicativo pode processar. Para assegurar que o aplicativo não receba mensagens de um tipo arbitrário ou desconhecido, o Service Broker aceitará um novo diálogo somente se o diálogo adotar um contrato especificado no serviço. Um serviço inicial especifica o contrato a ser usado quando a conversação começar, portanto, um serviço inicial não precisa incluir o contrato na definição de serviço.

Para criar os objetos para um serviço, faça o seguinte:

  1. Crie tipos de mensagem que definam as mensagens que seu serviço usará para realizar qualquer comunicação exigida. Você mesmo pode definir esses tipos ou obter scripts para criar os tipos do criador do serviço com o qual seu serviço se comunicará. Você pula essa etapa quando o banco de dados já contiver os tipos de mensagem que seu serviço precisa.

  2. Crie um ou mais contratos que definem a estrutura das conversações das quais esse serviço pode participar. Você mesmo pode definir esse contrato ou obter scripts para criar o contrato do criador do serviço com o qual seu serviço se comunicará. Você pula essa etapa quando o banco de dados já contiver os contratos que seu serviço precisa.

  3. Crie uma fila. O Service Broker usa essa fila para receber e armazenar mensagens de entrada para o serviço. Para obter mais informações sobre como criar filas, consulte CREATE QUEUE. Todo serviço deve ter uma fila. Para tornar a programação e administração mais simples, cada serviço geralmente usará uma fila dedicada àquele serviço. Se seu serviço requerer retenção de mensagem, especifique a retenção de mensagem para a fila.

  4. Crie um serviço. A definição de serviço especifica a fila que o serviço usa e os contratos para os quais esse serviço é o destino.

Na maioria dos casos, você cria o serviço de destino e, em seguida, usa os contratos e os tipos de mensagem criados para o serviço de destino para criar um serviço inicial. Em algumas casos, porém, você pode criar um serviço de destino para um serviço inicial que já está definido. Nesses casos, o serviço de destino usa os tipos de mensagem e contratos que o serviço inicial usa. Por exemplo, se você estiver criando um serviço de destino para receber notificações de evento, você usa o contrato https://schemas.microsoft.com/SQL/Notifications/PostEventNotification, porque esse é o contrato que o serviço inicial usa.

Gerenciando as definições de objeto

É recomendável que você crie um script do Transact-SQL para os objetos do Service Broker que seu aplicativo usa. Esse script do Transact-SQL facilita a referência às especificações de seus objetos do Service Broker. Esse script também fornece um modo de implantar o serviço em um sistema diferente ou recriar o serviço se for necessário.

Se o seu aplicativo envolver o envio de mensagens entre as instâncias do SQL Server, é recomendável que você crie um script que defina os tipos de mensagem e os contratos para o serviço e um segundo script que defina a fila e o serviço. O primeiro script define a interface para o serviço, os objetos que são comuns ao serviço inicial e o serviço de destino. O segundo script define o nome do serviço e a fila, os objetos para um lado da conversação.

Nesta seção