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.
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):
Você precisa alterar as três partes realçadas (seções 1, 2 e 3) com base na mensagem que será roteada pelo ESQL:
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.
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):
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.
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:
-- Section 1
DECLARE Variable1 EXTERNAL CHAR 'SAMPLES_QUEUES';
DECLARE Variable2 CHAR;
DECLARE Variable3 CHAR;
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).
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:
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 é:
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.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.MessageCount = 0;
SET CacheQueueTable.MessageCount = CacheQueueTable.MessageCount +1;