Sobre o Fluxo de Mensagens XML_Reservation

O fluxo de mensagens XML_Reservation reserva assentos no vôo listado na mensagem de entrada e gera mensagens de resposta para os passageiros, para confirmar suas reservas. As mensagens de resposta são colocadas na fila XML_RESERVATION_OUT.

O diagrama a seguir mostra o fluxo de mensagens XML_Reservation.

Captura de Tela do Fluxo de Mensagens XML_Reservation

A tabela a seguir lista os tipos de nós que são utilizados no fluxo de mensagens XML_Reservation.

Tipo de Nó Nome de Nó
MQInput XML_RESERVATION_IN
Banco de Dados UpdateFlightTable
Compute UpdatePassengerTable; BuildSingleMessage; PropagateMultipleMessages
Filter

MultipleOrSingleMessage

Throw InvalidRequest
MQOutput XML_RESERVATION_FAIL; XML_RESERVATION_OUT
Rastrear LogException

Para obter mais informações sobre os nós usados nesta amostra, consulte Nós integrados na documentação do WebSphere Message Broker. Para consultar o ESQL utilizado nesse fluxo de mensagens, consulte Criando o fluxo de mensagens XML_Reservation.

O fluxo de mensagens XML_Reservation executa as seguintes ações:

  1. O nó XML_RESERVATION_IN obtém a mensagem de entrada da fila XML_RESERVATION_IN e identifica a mensagem como sendo uma mensagem XML autodefinida.
  2. O nó XML_RESERVATION_IN analisa totalmente a mensagem usando o analisador XMLNSC, então transmite a mensagem de entrada através do terminal Out para o nó UpdateFlightTable. Alternativamente, se uma exceção for produzida por recebimento de dados e a mensagem for retornada, o nó transmite a mensagem de entrada através do terminal Catch para o nó XML_RESERVATION_FAIL, que analisa a mensagem para o nó LogException. O nó LogException, então, grava o erro no registro de erros local, que é o Visualizador de Eventos no Windows ou o syslog no Linux.
  3. O nó UpdateFlightTable verifica a tabela XMLFLIGHTTB para ver se os assentos solicitados estão disponíveis, então, atualiza a tabela XMLFLIGHTTB para mostrar se os assentos estão sendo alocados e agora menos assentos estão disponíveis.
  4. O nó UpdateFlightTable insere o valor de RESERVATIONSEQNO da tabela XMLFLIGHTTB em uma Variável de Ambiente, que é transmitida para o nó UpdatePassengerTable. O nó UpdatePassengerTable também coloca em uma Variável de Ambiente o número de assentos restantes em cada classe.
  5. O nó UpdateFlightTable transmite a mensagem de entrada através do terminal Out para o nó UpdatePassengerTable.
  6. O nó UpdatePassengerTable obtém a lista de passageiros da mensagem de entrada e os dados do vôo na árvore Ambiente e inclui os nomes e informações sobre reservas dos novos passageiros na tabela XMLPASSENGERTB no banco de dados RESERVDB.
  7. O nó UpdatePassengerTable cria e designa um número de reserva exclusivo a cada passageiro. O número de reserva é composto de:

    FlightNumber + FlightDate + RESERVATIONSEQNO

    O valor de RESERVATIONSEQNO é obtido da variável de Ambiente recebida do nó UpdateFlightTable. Por exemplo, o Número de Reserva de Mary Smith é CA937200305251. O nó UpdateFlightTable atualiza a tabela XMLPASSENGERTB com esses números de reserva.

  8. O nó UpdatePassengerTable transmite a mensagem de entrada através do terminal Out para o nó MultipleOrSingleMessage.
  9. O nó MultipleOrSingleMessage verifica o campo de mensagem de entrada chamado Request e determina onde transmitir a mensagem:
  10. Se a mensagem vai para o nó PropagateMultipleMessages, o nó PropagateMultipleMessages cria uma mensagem de resposta para um dos passageiros relacionados na mensagem de entrada, então transmite a resposta através do terminal Out para o nó XML_RESERVATION_OUT. O nó PropagateMultipleMessages cria uma mensagem de resposta semelhante para cada passageiro relacionado na mensagem de entrada.
  11. Se a mensagem vai para o nó BuildSingleMessage, o nó BuildSingleMessage cria uma mensagem de resposta única contendo uma lista dos passageiros e seus números de reserva, então transmite a resposta através do terminal Out para o nó XML_RESERVATION_OUT.
  12. O nó XML_RESERVATION_OUT coloca as mensagens de resposta na fila XML_RESERVATION_OUT.

As mensagens de entrada para o fluxo de mensagens XML_Reservation manipulam os dados no banco de dados RESERVDB. Essas manipulações incluem a adição de dados à tabela XMLPASSENGERTB. Os outros fluxos de mensagens recuperam alguns dos dados armazenados no banco de dados RESERVDB pelo fluxo de mensagens XML_Reservation. As duas mensagens de entrada são fornecidas para executarem o fluxo de mensagens XML_Reservation, de modo que haja dados suficientes armazenados no banco de dados para os outros fluxos de mensagem consultarem. Você deve executar XML_Reservation com as duas mensagens antes de executar qualquer outro fluxo de mensagens.

Sugestão de Design: Utilizando um Único Nó Compute

O fluxo de mensagens XML_Reservation tem dois nós separados para atualizar as tabelas XMLFLIGHTTB e XMLPASSENGERTB no banco de dados RESERVDB:

O nó UpdateFlightTable atualiza XMLFLIGHTTB com o número de reservas requerido por um vôo particular. Ele coloca os detalhes do vôo na árvore Ambiente para transmitir ao nó UpdatePassengerTable. O nó UpdatePassengerTable atualiza XMLPASSENGERTB com os detalhes dos passageiros que fizeram as reservas e inclui seus números de reserva exclusivos. Em seguida, o nó inclui os números de reserva exclusivos dos passageiros na mensagem.

Você pode combinar o dois nós em um único nó de Computador para melhorar o desempenho do fluxo de mensagens. No entanto, você não pode combiná-los em um único nó Banco de Dados porque o nó Banco de Dados não pode fazer alterações na mensagem. O fluxo de mensagens mostrado aqui utiliza dois nós separados para mostrar o que os nós Compute e Database podem fazer.

Voltar para a amostra Sobre as Reservas Aéreas