Pergunta

Atualmente, estamos construindo um aplicativo que precisa se comunicar com algumas filas da IBM WebSphere. No outro extremo das filas, há outro mundo. Devido a algumas circunstâncias desconhecidas (para mim), conectar -se ao MQQueuemanager leva 17 segundos todas as vezes, mas enviar e receber mensagens posteriormente através das filas não é um trabalho demorado. Como estamos colocando agora um serviço da web em frente ao WebSphere, tivemos a idéia de decorar e armazenar em cache os MQqueuManagers e os MQqueues e verificar antes de cada mensagem enviar se estiverem conectados, respectivamente abertos; Caso contrário, tentamos nos conectar ao MQQueuemanager, abrindo repectivamente o MQqueue (mais uma vez, o conexão com o MQQueuemanager leva 17 segundos, abrindo o MQQueue é "instantâneo"). Por isso, esperamos que, de vez em quando, o WebSphere desconecte o MQQueuemanager (não posso dizer com certeza, pois não podemos testar muito isso por enquanto, mas devemos ser cautelosos) e o azarado programa de chamadas esperaria 17 segundos para se reconectar. Como as coisas estão agora, não podemos prever a ocorrência de isso acontecer. Nossa implementação atual usa as classes MQ WebSphere para .NET. Existe alguma possibilidade de recebermos uma notificação de retorno de chamada quando o MQqueuemanager for desconectado ou as filas associadas estão fechadas?

Foi útil?

Solução

Sim! Se você usar as mais recentes classes WMQ .NET e as últimas IA9H SupportPac Você obtém um método de retorno de chamada assíncrono. (Isso vem com o código de amostra .NET mostrando como se registrar e usar o retorno de chamada.) Entendo que esse método passará sua rotina de retorno de chamada quando alguém estiver disponível ou passar uma exceção ao ouvinte de exceção registrada se a conexão for perdido ou fila está definido como GET(DISABLED).

Obtenha o mais recente cliente WMQ aqui. Procure supportPacs com nomes como MQC*. O cliente V8.0 é MQC8, o cliente V9 é MQC9, etc.

Se você tiver uma versão mais antiga das classes .NET WMQ e não puder atualizar por algum motivo, você sempre pode manter um encadeamento separado e pesquisar periodicamente a fila. Não pesquise com muita frequência, no entanto. No passado, vi pessoas usarem uma variável de classe como um cronômetro de contagem regressiva. Cada vez que uma mensagem é recuperada com sucesso ou colocada na fila, o timer é redefinido em seu máximo. Quando o cronômetro atingir zero, pesquise a fila. Dessa forma, você pesquise apenas a fila quando nenhum outro tráfego está na conexão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top