A ordenação de mensagens estritas pode ser atingida ao implementar aplicativos de bean acionado por mensagens para o provedor de sistema de mensagens do WebSphere MQ para quando nenhum recurso especial tiver sido codificado no aplicativo para manipular mensagens que chegam fora de ordem.
Para WebSphere Application Server Versão 7 e posterior, as portas listener são estabilizadas. Para obter informações adicionais, leia o artigo
sobre recursos estabilizados. Você deve planejar migrar as configurações de implementação do bean acionado por mensagens do WebSphere MQ do uso de portas do listener para o uso de especificações de ativação. ![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
Para obter informações adicionais sobre como configurar as especificações de ativação para o modo não ASF, veja Configurando especificações de ativação para o modo não ASF. No entanto, você não deve iniciar esta migração até ter certeza de que o aplicativo não precisa funcionar nos servidores de aplicativos anteriores ao WebSphere Application Server Versão 7. Por exemplo, se você possuir um cluster do servidor de aplicativos com alguns membros na Versão 6.1 e alguns em uma versão posterior, não deverá migrar os aplicativos nesse cluster para usar as especificações de ativação até depois de ter migrado todos os servidores de aplicativos no cluster para a versão posterior.
As seguintes suposições foram feitas neste cenário:
- O aplicativo de bean acionado por mensagens (MDB) é transacional.
- O limite de retorno (BOTHRESH) na fila do WebSphere MQ foi configurado para 0.
- Você está usando o WebSphere MQ Versão 6.0.
Configuração do WebSphere Application Server para Entrega Ordenada
- Se você estiver usando nas portas do listener no WebSphere Application Server, Máximo de
Sessões deve ser configurado como 1.
- Se você estiver usando especificações de ativação no WebSphere Application Server, Máximo
de Sessões do Servidor deve ser configurado como 1.
Informações importantes sobre esta configuração
Circunstâncias nas quais as mensagens podem chegar fora de ordem
As mensagens podem chegar fora
de ordem com esta implementação nas seguintes circunstâncias:
- Mensagens podem ser entregues fora de ordem durante
uma recuperação de transação:
Nota: Um conjunto específico de eventos deve ocorrer
em uma ordem específica para que esse cenário seja encontrado, o que é incomum. Entretanto, se uma entrega de mensagem ordenada for crucial para a operação do seu
aplicativo, essa entrega ordenada deverá ser considerada.
- Uma entrega de mensagem fora de ordem poderá ocorrer com essa opção de
implementação durante a recuperação de uma falha de um dos seguintes componentes:
- O servidor de aplicativos que hospeda o MDB
- O gerenciador de filas do WebSphere MQ
- Uma rede que conecta o servidor de aplicativos e o gerenciador de filas.
- Se um desses componentes falhar no meio de um two-phase
commit de uma transação MDB, o gerenciador de transações do servidor de aplicativos
restabelecerá sua conexão com o gerenciador de filas para resolver a transação
quando o componente estiver disponível novamente.
- Esse processo de recuperação é assíncrono e a entrega
de novas mensagens para o MDB pode ser iniciada antes que o processo de recuperação de transação seja
concluído. Se o resultado da recuperação de transação for retroceder a
transação, então a mensagem será retornada para a fila do WebSphere MQ e
novamente entregue para o aplicativo, possivelmente após novas mensagens já terem sido entregues.
- Após um retrocesso de transação, a próxima mensagem disponível
na fila poderá ser entregue antes que a mensagem retrocedida seja entregue novamente:
- Para uma porta listener ASF, configurar Máximo de novas tentativas para zero evita a entrega fora de ordem após a ocorrência de um retrocesso ao parar a porta listener. No entanto, a porta listener deve ser reinicializada manualmente.
- Para uma especificação de ativação, selecionar Parar terminal se a entrega
da mensagem falhar e configurar Número de falhas
de entrega sequencial antes de suspender o terminal para 0 evita entrega
fora de ordem após um retrocesso ao pausar o terminal de mensagem quando um retrocesso ocorrer. Entretanto, o terminal de mensagem para o MDB deverá então ser continuado manualmente. Para obter mais informações, consulte o centro de informações do WebSphere MQ.
- Durando a operação normal, quando vários encadeamentos estão enviando mensagens para o destino (para sequências
diferentes) usando transações:
- Esse comportamento ocorre devido à operação do cursor de navegação do WebSphere MQ.
- Quando uma mensagem for confirmada para uma fila do WebSphere MQ, enquanto outra mensagem enviada para o destino não é confirmada (dentro de uma transação que ainda não foi concluída), o cursor de navegação será movido para a mensagem mais nova na fila e não retornará automaticamente para a mensagem anterior quando ela for eventualmente confirmada. Isso pode fazer com que mensagens apareçam na fila após o cursor de navegação.
- Se esse cenário ocorrer, mensagens mais novas dentro de uma sequência poderão ser entregues ao MDB antes que o provedor de sistema de mensagens do WebSphere MQ varra novamente a fila e detecte a mensagem que apareceu atrás do cursor de navegação.
- Se a fila do WebSphere MQ que está sendo monitorada por uma especificação de ativação ou porta do listener ASF tiver o atributo de sequência de entrega de mensagens (MSGDLYSEQ) configurado para prioridade, a ordenação de mensagens poderá falhar em virtude dos motivos a seguir:
- As mensagens de uma prioridade inferior podem ser entregues antes das mensagens de uma prioridade superior, quando as mensagens de múltiplas prioridades forem enviadas para uma fila, esse comportamento ocorrerá em virtude da operação do cursor de navegação do WebSphere MQ. O cursor de navegação se move por meio de todas as mensagens
disponíveis na mais alta prioridade e, em seguida, nas mensagens de prioridade inferior. Se mensagens de prioridade
superior chegarem quando o cursor de navegação estiver navegando mensagens de prioridade inferior, as mensagens de
prioridade superior podem não ser entregues até que todas as mensagens de prioridade inferior na fila tenham sido
entregues.
- As portas do listener ASF ou as especificações de ativação que navegam por filas que possuem Sequência de Entrega de Mensagens configurada como FIFO não verão esse problema, pois o WebSphere MQ ordena as mensagens na fila na ordem em que elas chegam, em vez de ordená-las por prioridade.
Considerações para uma Implementação de Cluster
- É possível ativar o MDB apenas em um membro de cluster, pois o servidor de aplicativos não possui um recurso que possa
gerenciar esta ativação automaticamente.
- É possível configurar o estado de inicialização de portas do listener como parado, separadamente da configuração do
estado de inicialização de um aplicativo.
- É possível iniciar e parar os aplicativos, portas do listener do ASF e terminais de mensagens manualmente com
interfaces MBean usando o script wsadmin, ou usando as interfaces com.ibm.websphere.management.AdminClient do código
Java™.