Partilhar via


Interrompendo e iniciando aplicativos Service Broker

Às vezes, pode ser necessário interromper um aplicativo Agente de Serviços temporariamente. Por exemplo, você pode interromper um aplicativo ocupado para instalar uma versão atualizada do procedimento armazenado de ativação da fila. Apesar de poder alterar a fila sem interromper o aplicativo, as cópias do procedimento armazenado de ativação sendo executadas atualmente, podem nunca ficar sem mensagens a serem processadas e, portanto, nunca terminarem. Nesse caso, interromper a fila fará com que os procedimentos armazenados sendo executados terminem imediatamente. Ao iniciar o serviço novamente, o Agente de Serviços inicia o procedimento armazenado de ativação atualizado.

As informações nesta seção referem-se a interromper um aplicativo temporariamente para fins de manutenção. Para obter informações sobre como remover um serviço permanentemente do banco de dados, consulte Desinstalando os aplicativos Service Broker.

Para interromper um serviço temporariamente, altere a fila que o aplicativo usa de forma que o status de fila seja OFF. Quando o estado do aplicativo for OFF, a fila estará indisponível para receber operações que efetivamente interrompem o aplicativo. O Agente de Serviços não entregará novas mensagens à fila e não permitirá que um aplicativo receba mensagens da fila. Ao tentar receber uma mensagem da fila que esteja indisponível, o aplicativo recebe um erro Transact-SQL. Um aplicativo pode chamar END CONVERSATION em uma conversação a qualquer momento, independentemente de se a fila que a conversação usa está disponível ou não. Entretanto, o Agente de Serviços não entregará a mensagem End Dialog ao serviço remoto até que a fila se torne disponível.

Quando chega uma mensagem para uma fila interrompida, o Agente de Serviços mantém a mensagem na fila de transmissão para o banco de dados até que a fila de destino se torne disponível. O Agente de Serviços não considera uma mensagem proveniente de uma fila interrompida como um erro e não notifica o emissor. Quando a fila torna-se disponível, o Agente de Serviços entrega as mensagens na fila de transmissão à fila de serviço. Essa entrega usa a lógica normal de várias tentativas para mensagens. As mensagens são marcadas como atrasadas na fila de transmissão e novas tentativas são feitas periodicamente. O Agente de Serviços mantém a mensagem na fila de transmissão e atrasa a mensagem independentemente de se a mensagem se originou na mesma instância que a fila ou se chegou da rede.

Interromper uma mensagem não redefine o timer da conversação ou o timer de tempo de vida do diálogo para mensagens na fila. Se o timer expirar enquanto a fila é interrompida, o Agente de Serviços gerará as mensagens apropriadas quando a fila for iniciada novamente.

Para reiniciar o aplicativo, altere a fila que o aplicativo usa de modo que o status da fila seja ON. Isso inicia a fila. Quando a fila possui um procedimento armazenado de ativação especificado e também contenha mensagens, o Agente de Serviços inicia imediatamente o procedimento armazenado de ativação quando a fila é iniciada. Como a fila está disponível agora, o Agente de Serviços também gera mensagens para os timers de conversação e de tempo de vida do diálogo que expiraram enquanto a fila estava interrompida. Para um aplicativo que não usa ativação, reinicie o aplicativo usando o procedimento de inicialização definido para esse aplicativo.