Estendendo a Amostra Roteamento de Mensagens

O ESQL da amostra Roteamento de Mensagens é projetado de tal forma que ele pode ser modificado para ser utilizado em outros fluxos de mensagens com muito poucas alterações.

Reutilizando o Fluxo de Mensagens Routing_using_memory_cache

O arquivo ESQL Routing_using_memory_cache contém todo o ESQL utilizado na versão armazenada em cache da amostra. Abra esse arquivo e localize a seguinte seção (marcada como Seção 1 no ESQL):

Routing_using_memory_cache.esql

Você precisa alterar as três partes realçadas (seções 1, 2 e 3) com base na mensagem que será roteada pelo ESQL:

  1. As três variáveis ESQL: Variable1, Variable2, Variable3, são utilizadas pelo nó Compute para consultar o gerenciador de filas e a fila de destino na tabela de banco de dados. Essas variáveis podem ter hardcode atribuído ou derivadas da mensagem que chega. Na amostra, o primeiro valor tem hardcode atribuído e as outras duas são derivadas da mensagem XML que chega. É sensato ter o primeiro valor com hardcode atribuído para que um valor diferente possa ser utilizado para cada tipo de mensagem que possa ser roteada. Ao fazer isso, uma tabela de banco de dados poderá ser utilizada para vários conjuntos diferentes dos dados de roteamento. Para criar um valor com hardcode atribuído, defina seu valor na instrução DECLARE. Na amostra, Variable1 é definido com o valor SAMPLE_QUEUES.
  2. Esta seção no ESQL mostra como as informações da mensagem podem ser utilizadas para definir as outras duas variáveis. Para um tipo ou formato de mensagem diferente, essa parte precisa ser completamente regravada para que faça referência a campos na mensagem de entrada que precisam ser utilizados para roteamento.
  3. Se houver algum problema ao definir as Variáveis, os valores padrão serão definidos. Na amostra, elas estão definidas para default.

Você pode deixar o restante do ESQL inalterado quando reutilizá-lo para fornecer capacidade de roteamento em outro fluxo de mensagens. A tabela de banco de dados precisa ser atualizada com todas as novas entradas que o novo fluxo requer. Consulte o script do banco de dados setupRoutingDatabase que é fornecido com a amostra no projeto do fluxo de mensagens.

Uma coisa importante que deve ser feita ao utilizar o ESQL é certificar-se de que o modo nas propriedades do nó Compute esteja definido para um dos seguintes valores, caso contrário, as informações de roteamento serão perdidas:

O nome da origem ODBC do banco de dados também deve ser incluído nas propriedades do nó Compute.

Alterando o Escopo do Bloco BEGIN ATOMIC ... END;

A instrução BEGIN ATOMIC ... END; é utilizada no fluxo de mensagens Routing_using_memory_cache para assegurar-se de que apenas um encadeamento utilize o cache de memória por vez. A restrição de um único encadeamento nessa parte do ESQL será importante apenas se o cache for atualizado dinamicamente. Se for decidido que o cache não precisa ser atualizado durante a vida do fluxo de mensagens, o escopo do bloco atômico poderá ser reduzido para cobrir apenas a inicialização do cache. A seguinte figura mostra o ESQL atual (marcado como Seção 4 no ESQL):

Movendo Bloco de Início
  1. O BEGIN ATOMIC sinaliza que o seguinte ESQL terá um único encadeamento até que a instrução "END;" correspondente seja atingida.
  2. O comentário ESQL marcado pelo número 4 mostra para onde a instrução "END;" pode ser movida se o cache não for atualizado dinamicamente.
  3. A instrução "END;" atual precisa ser removida se um novo "END;" for colocado no marcador 4 acima.

Depois da modificação ser feita, a consulta do nome da fila no cache não terá mais um único encadeamento. Várias mensagens diferentes poderão ser lidas a partir do cache ao mesmo tempo.

Utilizando Variáveis Externas para Facilitar a Implementação do Fluxo de Mensagens em Sistemas Diferentes

As variáveis externas permitem que os valores com hardcode atribuído nos fluxos de mensagens sejam promovidos para o nível do fluxo de mensagens para que possam ser modificados no tempo de implementação. O fluxo de mensagens pode ser customizado no tempo de implementação no ambiente em que está sendo implementado sem precisar modificar o ESQL do fluxo de mensagens.

O fluxo de mensagens Routing_using_memory_cache tem uma variável denominada Variable1, que é utilizada para fazer a consulta do banco de dados. Ela tem hardcode atribuído para o valor SAMPLE_QUEUES. Faz sentido para essa variável ser externalizada no tempo de implementação para que seu valor possa ser modificado dependendo do sistema em que está sendo implementado. Isso, então, permite que um conjunto diferente de filas e gerenciadores de filas seja utilizado para cada sistema, mas ainda permite que a mesma tabela de banco de dados seja utilizada.

Para tornar Variable1 uma variável externa:

  1. Modifique o ESQL para declarar Variable1 como uma variável externa. Altere DECLARE Variable1 CHAR 'SAMPLE_QUEUES' para DECLARE Variable1 EXTERNAL CHAR 'SAMPLE_QUEUES'. O ESQL deve ficar semelhante a isto:
    -- Section 1
    DECLARE Variable1 EXTERNAL CHAR 'SAMPLES_QUEUES';
    DECLARE Variable2 CHAR;
    DECLARE Variable3 CHAR;
  2. A variável externa agora precisa ser definida no nível do fluxo de mensagens. Abra o fluxo de mensagens Routing_using_memory_cache e clique na guia Propriedades Definidas pelo Usuário na parte inferior do editor de fluxo de mensagens. Crie uma nova propriedade denominada Variable1 e defina seu valor padrão para SAMPLE_QUEUES:

    Propriedades Definidas pelo Usuário

  3. A variável Variable1 é agora uma variável externa. Inclua o fluxo de mensagens em um arquivo bar e, em seguida, clique na guia Configurar. Selecione o nó Compute no fluxo e altere o valor para a variável:

    Editor de Arquivos bar

Para utilizar essa variável externa, você precisa fazer algumas entradas novas no banco de dados ROUTING na tabela ROUTING_TABLE que tem parâmetros diferentes de Variable1. Se o fluxo for implementado sem alterar o valor de Variable1, ele deverá funcionar como antes. (Variable1 deve ser padronizado para SAMPLE_QUEUES).

Alterando os Critérios de Atualização do Cache

Os atuais critérios de atualização do cache da amostra Roteamento de Mensagens da tabela de banco de dados são:

Seria útil se outros critérios pudessem ser utilizados para decidir quando atualizar o cache. Os possíveis critérios poderiam ser:

  1. Atualizar o cache após um determinado período de tempo
  2. Atualizar o cache após um determinado número de mensagens

A amostra pode ser alterada facilmente para utilizar qualquer um desses critérios. O lugar crítico no ESQL para a atualização do cache é:

ESQL para critérios

Para alterar os critérios de atualização para utilizar um período de tempo de 60 segundos:

  1. Altere os critérios marcados em vermelho no ESQL para:

    IF CacheQueueTable.LastUpDate is null or (CURRENT_TIMESTAMP - CacheQueueTable.LastUpDate) second > INTERVAL '60' SECOND THEN

  2. Altere SET CacheQueueTable.valid = true; para

    SET CacheQueueTable.LastUpDate = CURRENT_TIMESTAMP;

Para alterar os critérios de atualização para true após 100 mensagens:

  1. Altere os critérios marcados em vermelho no ESQL para:

    IF CacheQueueTable.MessageCount is null or CacheQueueTable.MessageCount > 100 SECOND THEN

  2. Altere SET CacheQueueTable.valid = true; para

    SET CacheQueueTable.MessageCount = 0;

  3. Inclua uma instrução no final do módulo ESQL para incrementar a contagem:

    SET CacheQueueTable.MessageCount = CacheQueueTable.MessageCount +1;

Ícone Página Principal   Voltar para Home da Amostra