Estendendo a Amostra Message Routing Usando um Banco de Dados

É possível modificar a amostra Message Routing ESQL de forma que você possa usá-la em outros fluxos de mensagens.

Reutilizando o Fluxo de Mensagens Routing_using_database_and_memory_cache

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

Routing_using_database_and_memory_cache.esql

É necessário alterar as três partes destacadas (seções 1, 2 e 3) com base na mensagem que está sendo roteada pelo ESQL:

  1. As três variáveis ESQL: Variable1, Variable2 e Variable3, são usadas pelo nó Compute para consultar o gerenciador de filas e filas 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. É melhor ter o primeiro valor codificado permanentemente de modo que o valor diferente possa ser utilizado em cada tipo de mensagem que possa ser roteada, o que significa que uma tabela de banco de dados poderá ser usada por muitos conjuntos diferentes de dados de roteamento. Para criar um valor com hardcode atribuído, defina seu valor na instrução DECLARE. Na amostra, a Variable1 está configurada para o valor de SAMPLE_QUEUES.
  2. Esta seção no ESQL mostra como você pode usar informações da mensagem para configurar as outras duas variáveis. Para um tipo ou formato de mensagem diferentes, esta parte deve ser completamente regravada para ser referência aos campos na mensagem que chega que é usada para roteamento.
  3. Se ocorrer algum problema quando estiver configurando as variáveis, valores padrão são configurados. Na amostra, esses valores são configurados para o valor padrão.

Quando você reutiliza o ESQL para fornecer capacidade de roteamento em outro fluxo de mensagens, é possível deixar o restante do ESQL. 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 Message Broker.

Quando estiver usando o ESQL você deve certificar-se de que o Modo Compute nas propriedades do nó Compute esteja configurado 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, Origem de Dados, deve também ser incluído às propriedades do nó Compute.

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

A instrução BEGIN ATOMIC ... END; é usada no fluxo de mensagens Routing_using_memory_cache para assegurar que somente um encadeamento use o cache de memória por vez. A restrição de encadeamento único nesta parte do ESQL é importante apenas se o cache estiver para ser atualizado dinamicamente. Se ficar decidido que o cache não requer atualização durante a vida do fluxo de mensagens, é possível reduzir o escopo do bloco atômico para cobrir apenas a inicialização do cache. O diagrama a seguir mostra o ESQL atual (marcado como Seção 4 no ESQL):

Movendo o Bloco Inicial
  1. BEGIN ATOMIC assinala que o seguinte ESQL está para ter encadeamento único até o instrução correspondende END; ser atingida.
  2. Se o cache são estiver sendo dinamicamente atualizado, o comentário ESQL marcado pelo número 4 mostra para onde a instrução END; pode ser movida.
  3. Se um novo END; for colocado no marcador 4, a instrução END; atual deverá ser removida.

Após essa modificação ser realizada, a consulta do nome da fila no cache não será mais de encadeamento único. 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 momento da implementação para o ambiente no qual está sendo implementado sem precisar modificar o fluxo de mensagens ESQL.

O fluxo de mensagens Routing_using_database_and_memory_cache tem uma variável chamada Variable1, que é usada para executar a consulta ao banco de dados; ela está codificada permanentemente para o valor SAMPLE_QUEUES. Essa variável deve ser externalizada no momento da implementação de forma que seu valor possa ser modificado, dependendo do sistema no qual ele está sendo implementado. Essa exteriorização permite que você utilize um conjunto diferente de filas e gerenciadores de filas para cada sistema.

Para tornar Variable1 uma variável externa:

  1. Modifique o ESQL para declarar Variable1 como uma variável externa. Alteração
    DECLARE Variable1 CHAR 'SAMPLE_QUEUES'
    a
    DECLARE Variable1 EXTERNAL CHAR 'SAMPLE_QUEUES'
    O ESQL deve parecer-se com o seguinte exemplo:
    -- Section 1
    DECLARE Variable1 EXTERNAL CHAR 'SAMPLES_QUEUES';
    DECLARE Variable2 CHAR;
    DECLARE Variable3 CHAR;
  2. A variável externa deve ser definida no nível do fluxo de mensagens.
    1. Abra o fluxo de mensagens Routing_using_database_and_memory_cache, clique na guia Propriedades Definidas pelo Usuário na parte inferior do editor de Fluxo de Mensagens.
    2. Crie uma nova propriedade denominada Variable1 e configure seu valor padrão para SAMPLE_QUEUES:

      Propriedades Definidas pelo Usuário

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

      Editor de Arquivos BAR

Para usar esta variável externa, você deve fazer novas entradas no banco de dados ROUTING na tabela ROUTING_TABLE a qual possui parâmetros Variable1 diferentes. Caso o fluxo seja implementado sem alterar o valor da Variable1, logo, ele funcionará como antes. (Variable1 padroniza-se 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 caso outro critério pudesse ser usado para decidir quando atualizar o cache. Critérios possíveis podem 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 para utilizar-se de qualquer desses critérios. O lugar crítico no ESQL para 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 o critério circulado em vermelho no ESQL para:
    IF CacheQueueTable.LastUpDate is null or (CURRENT_TIMESTAMP -
    CacheQueueTable.LastUpDate) second > INTERVAL '60' SECOND THEN
  2. Alteração
    SET CacheQueueTable.valid = true;
    a
    SET CacheQueueTable.LastUpDate = CURRENT_TIMESTAMP;

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

  1. Altere os critérios que estão circulados em vermelho no ESQL para:
    IF CacheQueueTable.MessageCount is null or
    CacheQueueTable.MessageCount > 100 SECOND THEN
  2. Alteração
    SET CacheQueueTable.valid = true;
    a
    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;

Voltar para Home da Amostra