none
Service Broker com instâncias distintas. As mensagens não chegam na instância destino. RRS feed

  • Pergunta

  • Olá senhores, boa noite.

    Estou montando um teste com Service Broker (SB) entre dois banco de dados entre duas instância distintas dentro de um cluster Microsoft. O cluster é formado por duas máquinas dentro do mesmo segmento de rede. Para fins de teste, cada instância está em nós diferentes.

    Como base de orientação, usei o tutorial da documentação da Microsoft

    https://msdn.microsoft.com/pt-br/library/bb839483(v=sql.100).aspx

    Todas as configurações passo a passo e foram aplicadas sem apresentar mensagens de erro.

    Fiz um teste com sucesso usando telnet entre os IP de cada instância pela porta 4022.

    Mas quando comecei a fazer o teste de envio de mensagem, a mesma fica na fila do iniciador mas não aparece na fila do destino.

    Não coloquei o código T-SQL pois achei ele grande, mas se for necessário....

    Alguém sabe o que pode ser?

    Grato,

    Wolney



    Wolney

    quinta-feira, 21 de janeiro de 2016 01:51

Todas as Respostas

  • Wolney,

    Você verificou na instância destino se o serviço MSDTC esta rodando?

    No meu blog que postei em 2013 e 2014 uma série dedicado ao Service Browser, veja se ela poderá te ajudar:

    https://pedrogalvaojunior.wordpress.com/2013/10/22/trabalhando-com-o-service-broker-no-microsoft-sql-server-2008-2008-r2-e-2012-parte-i/

    https://pedrogalvaojunior.wordpress.com/2013/11/21/trabalhando-com-o-service-broker-no-microsoft-sql-server-2008-2008-r2-e-2012-parte-ii/

    https://pedrogalvaojunior.wordpress.com/2014/02/07/trabalhando-com-o-service-broker-no-microsoft-sql-server-2008-2008-r2-e-2012-parte-iii/

    https://pedrogalvaojunior.wordpress.com/2014/04/03/trabalhando-com-o-service-broker-no-microsoft-sql-server-2008-2008-r2-e-2012-final/


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quinta-feira, 21 de janeiro de 2016 11:40
  • Olá.

    Obrigado pela resposta Junior e desculpa pela demora no retorno. Voltei para os teste desde segunda-feira.

    No caso das instância que estou configurando, elas fazem parte do mesmo Cluster Microsoft e rodam no mesmo nó em um ambiente de teste. Neste cluster já tem um Cluster Group com o MSDTC que também está rodando no mesmo nó.

    Configurei o MSDTC (Run dcomcnfg) no nó onde estão as instâncias. Em Component Services\Computer\My Computer. Em MyComputer acessei e propriedades e na aba MSDTC acessei o botão Security Configuration. 

    Configurei a parte de Transaction Manager Communication (Allow inBound e Allow Outbound).

    Remontei novamente toda a configuração do service broker conforme tutorial da Microsoft. 

    Na instância intitulada DESTINO foi criado:

    • Endpoint com Porta 4022 
    • Banco de dados com a opção de Service Broker habilitada.
    • Master Key
    • User sem login 
    • Certificado (criado um backup desse certificado)
    • Tipos de Mensagens. No caso dois tipos XML.
    • Um contrato com os dois tipos de mensagem 
    • Uma fila
    • Um serviço com autorização do usuario acima, para a fila e contrato. 

    Na instância INICIADOR, foi criado.

    • Endpoint com porta 4022
    • Um banco de dados com SB habilitado.
    • Master Key
    • Certificado  
    • Tipos de Mensagens. No caso dois tipos XML com o mesmo nome do Destino. 
    • Um contrato com os dois tipos de mensagem com o mesmo nome do Destino
    • Uma fila
    • Um serviço com autorização do usuario acima, para a fila e contrato. 
    • Um usuário igual ao criado no Destino 
    • Um outro certificado com autorização desse novo usuário com base no backup do certificado do Destino.
    • Uma Rota para o serviço no DESTINO (especificado o IP e Porta (4022))  e apontando o banco de dados destino (referenciado pelo GUID do Broker) 
    • Uma Rota no MSDB para o serviço LOCAL 
    • Uma Rota remota para o serviço no destino (???)

    Retornando a instância DESTINO 

    • Um usuário igual ao criado no Iniciador  
    • Um outro certificado com autorização desse novo usuário com base no backup do certificado do Iniciador .
    • Uma Rota para o serviço no INICIADOR (especificado o IP e Porta (4022))  e apontando o banco de dados destino (referenciado pelo GUID do Broker) 
    • Uma Rota no MSDB para o serviço LOCAL 
    • Permissão de SEND para o servido DESTINO
    • Uma Rota remota para o serviço no destino (???)

    Ufa!! Isso tudo configurado com a mesma conta de domínio em ambos os nós e essa conta membro da sysadmin.

    Quando faço o teste de envio de mensagem a partir do Iniciador, a mensagem fica na fila do iniciador (coloquei a fila com opção de retenção)  mas não aparece na fila do Destino.

    Estou pesquisando outras literaturas para identificar onde foi que estou errando...

    Mas se alguém souber de mais dicas, agradeço.


    Wolney

    quarta-feira, 27 de janeiro de 2016 19:46
  • Olá,

    Fiz alguns Troubleshooting para identificar o que pode estar ocorrendo:

    Profiler.

    Existem alguns eventos para monitorar o SB. Todos foram habilitados e monitorados durante o envio da mensagem, mas em nenhum deles aparaceu alguma mensagem que oriente na resolução do problema.

    SQL Server Error log:

    Nas duas instâncias não tem mensagens de erro dentro do ErrorLog.

    View sys.transmission_queue:

    Utilizei a view acima para monitar as mensagem que foram transmitidas. Duas colunas poderiam ajudar, mas elas não estavam preenchidas. Uma delas é a "is_conversation_error" que se tiver 1 indicar que houve erro. Todas estavam com zero. Outra coluna é a "transmission_status" que deveria conter a mensagem de erro. Também está vazia. 

    Segundo o Technet, se a coluna "transmission_status" não tem valor, é que a mensagem não tem erro e está esperando para ser enviada para o Destino.

    Event Viewer:

    Não tevem nenhuma entrada no Event Viewer

    Por enquanto foi isso. 

    Agora vou ver a ferramenta ssbdiagnose para tentar identificar algo

    Até mais !!!



    Wolney

    quinta-feira, 28 de janeiro de 2016 20:15