Criando aplicativos com o Service Broker

Qualquer programa que possa executar instruções Transact-SQL pode usar o Service Broker. Um aplicativo Service Broker pode ser implementado como um programa executado fora do SQL Server ou como um procedimento armazenado escrito no Transact-SQL ou em uma linguagem .NET.

Um programa que usa o Service Broker geralmente é composto por alguns componentes que funcionam em conjunto para realizar uma tarefa. Um programa que inicia uma conversação cria e envia uma mensagem a outro serviço. Esse programa pode esperar uma resposta ou sair imediatamente e confiar em outro programa para processar a resposta. No caso de um serviço que é o destino de uma conversação, o programa recebe uma mensagem de entrada da fila para o serviço, lê os dados da mensagem, executa qualquer processamento necessário e cria e envia uma mensagem de resposta, se apropriado.

O Service Broker estende Transact-SQL. Um aplicativo não precisa de um modelo de objeto especial ou biblioteca para funcionar com o Service Broker. Em vez disso, os programas enviam comandos Transact-SQL ao SQL Server e processam os resultados desses comandos. Um aplicativo pode ser ativado pelo Service Broker, pode ser executado como um serviço em segundo plano ou um trabalho agendado ou pode ser iniciado em resposta a um evento. Para obter mais informações sobre as estratégias para iniciar um aplicativo que usa o Service Broker, consulte Escolhendo uma estratégia de inicialização.

Para obter mais informações sobre como criar aplicativos com o Service Broker, consulte Benefícios de programar com o Service Broker.

Visão geral sobre aplicativos Service Broker

A seguinte ilustração mostra a interação em um aplicativo que usa o Service Broker:

Relação e fluxo de mensagens em conversas

Como mostrado na ilustração, os tipos de mensagem SubmitExpense, AcceptDenyExpensee ReimbursementIssuedsão criados primeiro. O contrato ProcessExpenses é criado com base nesses tipos de mensagem e fornece um esquema para que uma conversação conclua uma tarefa de reembolso de despesa. O contrato ProcessExpenses rege todas as conversações entre o serviço ProcessExpense e o serviço SubmitExpense. O contrato ProcessExpenses e os tipos de mensagem que ele usa devem existir nos bancos de dados de todos os serviços que têm considerações com base nesse contrato.

O Service Broker armazena as mensagens enviadas ao serviço SubmitExpense na fila desse serviço. O procedimento armazenado ExpenseSubmission recebe mensagens dessa fila, processa-as e as enviará a outro serviço se uma resposta for necessária.

O Service Broker armazena as mensagens enviadas ao serviço ProcessExpense na fila desse serviço. O procedimento armazenado ExpenseProcessing recebe mensagens dessa fila, processa-as e as enviará a outro serviço se uma resposta for necessária.

Uma conversação entre esses dois serviços seria estruturada da seguinte forma:

  • Um usuário envia uma solicitação de reembolso de despesa por meio de uma interface de usuário. O aplicativo executa o procedimento armazenado ExpenseSubmission que cria uma mensagem SubmitExpense. O serviço SubmitExpense inicia uma conversação com o serviço ProcessExpense e envia a mensagem SubmitExpense ao serviço de ProcessExpense.

  • O Service Broker recebe a mensagem SubmitExpense para o serviço ProcessExpense e a coloca na fila ExpenseQueue. A fila ExpenseQueue ativa o procedimento armazenado ProcessExpense, que retira da fila e processa a mensagem SubmitExpense. Em seguida, o procedimento armazenado ProcessExpense cria uma mensagem AcceptDenyExpense e a envia ao serviço SubmitExpense. Se a despesa for negada, o procedimento armazenado ProcessExpense terminará a conversação.

  • O Service Broker coloca a mensagem AcceptDenyExpense para o serviço SubmitExpense na fila para o serviço. Se o procedimento ProcessExpense terminou a conversação, o Service Broker coloca uma mensagem EndDialog na fila Expenses. A fila ativa o procedimento armazenado ExpenseSubmission, que retira da fila e processa a mensagem AcceptDenyExpense. Se o procedimento armazenado ExpenseSubmission localizar uma mensagem EndDialog na fila, o procedimento terminará a conversação.

  • Se a despesa for aceita, o serviço ProcessExpense criará e enviará uma mensagem ReimbursementIssued confirmando que o pagamento da despesa foi emitido e terminará a conversação. O Service Broker coloca essas mensagens na fila para o serviço. A fila ativa o procedimento ExpenseSubmission e ele processa a mensagem ReimbursementIssued. O procedimento processa a mensagem EndDialog e termina a conversação.