Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a: SQL Server
Instância Gerenciada de SQL do Azure
Todas as mensagens enviadas pelo Service Broker fazem parte de uma conversa. Um diálogo é uma conversa entre dois serviços. Um diálogo é um fluxo bidirecional confiável e persistente de mensagens entre dois serviços.
Os diálogos fornecem entrega de mensagens EOIO (exatamente-uma vez-na-ordem). Os diálogos usam o identificador de conversa e os números de sequência contidos em cada mensagem para identificar as mensagens relacionadas e entregar mensagens na ordem correta. Um diálogo é um fluxo confiável e persistente de mensagens entre dois serviços.
Uma conversa de diálogo tem dois participantes. O iniciador inicia a conversa. O destino aceita uma conversa iniciada pelo iniciador. Se um participante inicia a conversa, isso determina as mensagens que ele pode enviar, conforme o especificado no contrato para a conversa. O seguinte diagrama mostra a o fluxo de mensagens de um diálogo:
Os aplicativos trocam mensagens como parte do diálogo. Quando o SQL Server recebe uma mensagem para um diálogo, o SQL Server coloca essa mensagem na fila para o diálogo. O aplicativo recebe a mensagem da fila e a processa conforme o necessário. Como parte do processamento, o aplicativo pode enviar mensagens ao outro participante do diálogo.
Entrega segura
As caixas de diálogo incorporam confirmações automáticas de recebimento de mensagens para garantir a entrega confiável. O Service Broker salva cada mensagem contínua na fila de transmissão até que a mensagem seja reconhecida pelo serviço remoto. Essas confirmações automáticas economizam tempo e recursos tornando desnecessário para um aplicativo confirmar cada mensagem explicitamente. Quando possível, as mensagens de confirmação são incluídas como parte de mensagens de retorno para o diálogo.
Observação
O Service Broker manipula mensagens de confirmação internamente. Essas mensagens não aparecem em uma fila e não são entregues ao aplicativo. O Service Broker não considera que seja um erro para um serviço remoto se tornar inacessível. Quando um serviço remoto está inalcançável, o Service Broker armazena as mensagens desse serviço até que seja possível acessá-lo ou o tempo de vida do diálogo terminar.
Tempo de vida do diálogo
Mensagens podem ser trocadas entre aplicativos durante o tempo de vida do diálogo. O tempo de vida de um diálogo vai da hora em que a instância local do SQL Server cria o diálogo até um aplicativo terminar explicitamente o diálogo ou receber uma mensagem de erro associada a esse diálogo. Cada participante é responsável por terminar explicitamente a conversa quando o aplicativo recebe uma mensagem que indica um erro ou o fim da conversa. Na maioria dos serviços, um participante é responsável por indicar que a conversa foi concluída e bem-sucedida terminando a conversa sem erros. Isso será feito pelo destino ou o iniciador, dependendo do propósito da conversa.
O Service Broker local para um aplicativo de início cria um ponto de extremidade de conversa para o diálogo quando o aplicativo inicia esse diálogo. O Service Broker local de um aplicativo de destino criar um ponto de extremidade de conversa para o diálogo quando a instância recebe a primeira mensagem no diálogo.
Os diálogos também podem garantir que o tempo de vida de uma conversa não exceda um limite especificado. O aplicativo de início pode especificar um tempo de vida máximo para o diálogo. O Service Broker local e o Service Broker remoto acompanham este tempo de vida. Quando um diálogo permanece ativo pelo tempo de vida máximo, cada lado da conversa coloca uma mensagem de erro de tempo limite na fila do serviço e recusa novas mensagens para o diálogo. As conversas nunca ultrapassam o tempo de vida máximo estabelecido quando o diálogo é iniciado. Observe que, embora um aplicativo ainda possa receber mensagens para a conversa após o término dela, nenhuma mensagem nova poderá chegar para essa conversa. O aplicativo não pode enviar mensagens sobre a conversa.
Os aplicativos são responsáveis por indicar quando terminam com um diálogo terminando explicitamente esse diálogo. O Service Broker nunca encerra um diálogo automaticamente. O diálogo permanece no banco de dados até um aplicativo terminar a conversa de modo explícito. Assim, mesmo que o tempo limite do diálogo seja alcançado ou o agente reporte um erro, cada participante na conversa deve emitir explicitamente a instrução END CONVERSATION.
Timer de conversa
Um timer de conversa permite a um aplicativo receber uma mensagem em uma determinada hora. Quando o temporizador da conversa expira, o SQL Server insere uma mensagem para a conversa na fila dela, no ponto de extremidade que iniciou o timer de conversa. Um aplicativo pode usar um timer de conversa para qualquer finalidade. Um uso comum para um timer de conversa é responder a atrasos em respostas do serviço remoto. Outro uso comum é criar um serviço que envia mensagens ao serviço remoto a intervalos definidos. Por exemplo, um serviço pode usar um temporizador de conversa para reportar o estado atual do SQL Server em prazos estabelecidos de minutos. Os aplicativos também podem usar um timer de conversa para ativar um procedimento armazenado em um certo momento. Isso permite que o Service Broker ofereça suporte a atividades agendadas.
Cada participante em uma conversa pode definir um timer por conversa. O timer de conversa não é compartilhado com o outro participante e não afeta o tempo de vida da conversa. Em vez disso, quando o temporizador expira, o Service Broker local adiciona uma mensagem de tempo limite para a fila do serviço local. Uma mensagem de tempo limite tem o nome de tipo https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer