Maneira de fazer uma solicitação ruim em uma fila de letras mortas ao usar o JAX-RPC?

StackOverflow https://stackoverflow.com/questions/1567526

  •  21-09-2019
  •  | 
  •  

Pergunta

Estou usando o JAX-RPC 1.1 para gerar serviços para um conjunto de aplicativos em execução foi 6.0, comunicando-se via WebSphere MQ. Um mainframe estará enviando mensagens para os Serviços; portanto, se, por algum motivo, a mensagem não puder ser convertida em objetos (provavelmente devido à estranheza ebcdic-to-ASCII), a mensagem precisa ser colocada na fila de letra morta para exame .

Alguém sabe se existe uma maneira padrão de fazer isso (ou seja, fornecendo o JMS:/ endereço com um nome DLQ) ou se o forwarding do DLQ precisará ser executado manualmente de alguma forma?

Foi útil?

Solução

Primeiro, deixe -me recomendar que você não confie no DLQ para isso. O DLQ é um recurso de nível QMGR usado para armazenar mensagens que o canal não pode resolver. Por ser um vetor de ataque em potencial, a maioria das lojas conscientes da segurança não concede acesso a aplicativos ou, se o fizerem, é o acesso somente para a colocação.

A melhor maneira de fazer isso é criar uma fila de exceção específica do aplicativo. Se o aplicativo tiver várias filas de entrada, todas elas poderão usar a mesma fila de exceção e, em seguida, a equipe de suporte do aplicativo poderá gerenciar qualquer mensagem que aterrisse lá sem os problemas de segurança.

Qualquer que seja o caminho, conseguir que o aplicativo honre isso é extremamente fácil. Por exemplo, suponha que seu aplicativo esteja lendo Jax.svc.request. Você define a fila de exceção e aponta os campos boq*:

Def Ql (Jax.svc.exception) Alter QL (Jax.svc.request) boqname (Jax.svc.exception) boqthresh (5)

As classes JMS perguntam sobre os atributos BOQ* da fila quando ela for aberta e verifique a contagem de backup de cada mensagem lida. No seu programa, use uma sessão transativa e, se você não puder processar a mensagem, ligue para o método session.backout (). A mensagem será lida e não foi mais apoiada do que os tempos do BathShesh, depois foi solicitado à fila nomeada no BoqName. Se essa fila estiver cheia ou indisponível, o DLQ será tentado. Se isso falhar, as classes lançarão uma exceção.

Escolhemos um bothresh> 1 para permitir a possibilidade de uma mensagem processável ser apoiada se, por exemplo, o QMGR for desligado.

Normalmente, eu aciono a fila de exceção para que ela possa levantar um alarme ou enviar um email se algo cair nela. Se você tiver uma ferramenta de monitoramento, pode verificar a profundidade> 0.

Se, por algum motivo, você não quiser usar a funcionalidade JMS para solicitar automaticamente a mensagem, o aplicativo precisará de lógica para solicitá -la. Se você colocar a mensagem no DLQ, desejará prender um cabeçalho DLQ. Não fazer isso provavelmente quebrará o manipulador DLQ ou qualquer outra instrumentação assistindo a essa fila.

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