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
Quando uma fila especifica a retenção de mensagens, o Service Broker não exclui mensagens da fila até que a conversa termine. Além disso, o Service Broker também copia mensagens de saída para a fila. Isso permite que o serviço mantenha um registro preciso das mensagens de entrada e saída.
A retenção de mensagem permite que você mantenha um registro exato de uma conversa para uma fila enquanto a conversa estiver ativa. Para os aplicativos que requerem auditoria detalhada ou que tenham que executar transações de compensação quando a conversa falhar, isso poderá ser mais conveniente que copiar cada mensagem para uma tabela de estado enquanto a conversa estiver em andamento.
A retenção de mensagem aumenta o número de mensagens na fila para conversas ativas e aumenta a quantidade de trabalho que o SQL Server executa durante o envio de uma mensagem. Portanto, a retenção de mensagem reduz o desempenho. O impacto de desempenho exato depende dos padrões de comunicação para os serviços que usam a fila. Em geral, você deve usar a retenção de mensagem quando ela for exigida para um aplicativo operar corretamente. Se o aplicativo não exigir um registro exato de todas as mensagens enviadas e recebidas enquanto a conversa estiver ativa, manter o estado em uma tabela de estado poderá melhorar o desempenho. Lembre-se também de que, quando a conversa terminar, as mensagens retidas serão removidas da fila, portanto, se você estiver usando a retenção para fins de auditoria, deverá ter certeza de copiar as mensagens para o armazenamento permanente antes de encerrar a conversa.
Observação
O uso de retenção de mensagem pode reduzir o desempenho. Você só deve usar essa configuração se o contrato de nível de serviço do aplicativo exigir que o aplicativo mantenha as mensagens exatas enviadas e recebidas. As mensagens em uma fila que estão prontas para serem recebidas têm um status de 1. A RECEIVE instrução retorna mensagens que mostram um status de 1. Depois que a RECEIVE instrução retorna uma mensagem, ela define o status como 0 e deixa a mensagem na fila se a retenção de mensagem estiver ativada. Se a retenção de mensagens estiver desativada, a RECEIVE instrução excluirá a mensagem da fila. Qualquer serviço que usa a fila salva as mensagens de entrada e saída. Nesse caso, o comando SEND copia mensagens para a fila do serviço (com um status de 3) além de adicionar a mensagem à fila de transmissão. Quando a conversa termina, a fila exclui todas as mensagens para a conversa.
Um aplicativo não pode receber a mesma mensagem duas vezes e um aplicativo não pode receber uma mensagem que foi adicionada à fila como uma mensagem de saída. Para trabalhar com mensagens retidas, use uma SELECT instrução a fim de consultar a fila. Para auditar, um aplicativo insira as mensagens retidas em uma tabela de auditoria antes de terminar a conversa. Para as transações de compensação, um aplicativo normalmente trabalha retroativamente com mensagens processadas e desfaz o trabalho para cada mensagem em turnos até todas as mensagens terem sido processadas.
Para obter mais informações sobre como usar SELECT instruções para acessar uma fila, consulte filas de consulta.