É possível modificar a amostra Message Routing ESQL de forma que você possa usá-la em outros fluxos de mensagens.
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):
É necessário alterar as três partes destacadas (seções 1, 2 e 3) com base na mensagem que está sendo roteada pelo ESQL:
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.
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):
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.
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:
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;
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).
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:
A amostra pode ser alterada para utilizar-se de qualquer desses critérios. O lugar crítico no ESQL para atualização do cache é:
Para alterar os critérios de atualização para utilizar um período de tempo de 60 segundos:
IF CacheQueueTable.LastUpDate is null or (CURRENT_TIMESTAMP - CacheQueueTable.LastUpDate) second > INTERVAL '60' SECOND THEN
SET CacheQueueTable.valid = true;a
SET CacheQueueTable.LastUpDate = CURRENT_TIMESTAMP;
Para alterar os critérios de atualização para true após 100 mensagens:
IF CacheQueueTable.MessageCount is null or CacheQueueTable.MessageCount > 100 SECOND THEN
SET CacheQueueTable.valid = true;a
SET CacheQueueTable.MessageCount = 0;
SET CacheQueueTable.MessageCount = CacheQueueTable.MessageCount +1;