Na primeira parte do IBM MQ Basics, disponível aqui, mostrei a criação e o uso básicos de filas.

Se o IBM MQ permitisse apenas que filas locais fossem criadas e usadas, seria menos útil. Um dos pontos fortes do IBM MQ é a capacidade de vincular dois ou mais gerenciadores de filas e enviar mensagens para outro gerenciador de filas.

Neste artigo, mostrarei como vincular dois gerenciadores de filas usando filas e canais remotos.

Em primeiro lugar, você precisa de dois gerenciadores de filas diferentes. Não importa se estão na mesma máquina. Estou usando duas máquinas (na verdade, duas máquinas virtuais na minha máquina de trabalho, mas o resultado final é absolutamente o mesmo).

Estou usando o mesmo gerenciador de filas que configurei no último artigo desta série e outro, chamado QM2, com a mesma configuração, ou seja, um ouvinte chamado LISTENER. TCP, com tipo de transporte (TRPTYPE) TCP, escutando na porta 1414 e um canal para fins de administração do tipo conexão de servidor (SVRCONN) nome CLNT. ADM.

Filas remotas

Uma fila remota é uma fila como qualquer outra, com algumas exceções notáveis:

  • é impossível ler; só pode ser escrito;
  • refere-se a outra fila (remota, local ou alias) em outro gerenciador de filas;
  • não ocupa nenhum espaço no disco rígido, exceto o espaço necessário para armazenar sua definição;
  • você pode (e deve) especificar uma fila de transmissão (mais sobre esse tipo de fila mais tarde);

Canais e tipos de canais

A comunicação entre gerenciadores de filas e entre clientes e gerenciadores de filas é sempre feita por meio de canais.

Os nomes dos canais podem ter no máximo 21 caracteres.

Já falamos sobre um tipo de canal (o tipo SVRCONN). O canal de conexão de servidor é usado para comunicação entre aplicativos cliente MQ e um gerenciador de filas.

Os outros dois tipos de canais sobre os quais vou falar agora são os tipos canal emissor (SDR) e canal receptor (RCVR).

Como o próprio nome indica, o canal receptor é usado como a extremidade receptora de um canal emissor. Então, eles sempre vêm em pares.

Os canais remetente e receptor devem ter o mesmo nome. É assim que um gerenciador de filas de envio identifica a extremidade receptora.

Filas de transmissão

Finalmente, deve-se definir uma fila de transmissão antes de criar um canal de remetente.

Esse é um tipo especial de fila local (você pode gravar e ler a partir dela, embora não seja aconselhável) que serve como um armazenamento temporário de mensagens para mensagens que estão sendo enviadas para um gerenciador de filas remoto. Se, por exemplo, o gerenciador de filas remoto estiver inativo por algum motivo ou a conexão de rede entre os dois gerenciadores de filas não estiver disponível, o gerenciador de filas de envio armazenará as mensagens destinadas ao gerenciador de filas remoto nesse tipo de fila.

Para cada canal de remetente, você precisa criar uma fila de transmissão.

Juntando tudo

Configurando o QM1

Okey. Vamos começar.

No exemplo a seguir, vou criar uma fila remota no gerenciador de filas QM1 que se refere a uma fila local no gerenciador de filas QM2.

Começando com o gerenciador de filas QM1.

Primeiro, crie uma fila de transmissão:

DEFINE QLOCAL(‘TO.QM2.X’) USAGE(XMITQ) TRIGGER TRIGDATA(TO.QM2) TRIGTYPE(FIRST)

Este comando define algo não discutido acima: disparo. Por enquanto, deixe-me apenas dizer que as últimas três opções permitem iniciar automaticamente o canal chamado TO. QM2 quando uma mensagem é colocada no TO. QM2. Fila de transmissão XmitQ.

Em seguida, precisamos criar um canal de remetente:

DEFINE CHANNEL(TO.QM2) CHLTYPE(SDR) CONNAME(‘mq2(1414)’) XMITQ(‘TO.QM2.X’)

Este comando define um canal de remetente chamado TO. QM2 para hospedar mq2, porta TCP 1414 que usa o TO. QM2. Fila de transmissão XmitQ.

Finalmente, para encapsular as configurações no gerenciador de filas QM1, defina o Q2. W fila remota:

DEFINE QREMOTE(Q2.W) RQMNAME(QM2) RNAME(Q2.R) XMITQ(‘TO.QM2.X’)

Esta definição de fila remota tem uma opção de configuração que não é amplamente utilizada: a opção XMITQ. Esta opção permite que você escolha o canal do remetente que será usado por essa fila remota, especificando sua fila de transmissão. Se você não especificar a fila de transmissão usada por um remoto, o gerenciador de filas escolherá um canal apropriado para enviar suas mensagens.

Configurando o QM2

A configuração para o gerenciador de filas QM2 é muito simples.

Primeiro, defina uma fila local com o nome da opção RNAME da fila remota criada no QM1 (Q2. R).

DEFINE QLOCAL(Q2.R)

Finalmente, defina um canal receptor com o mesmo nome do canal remetente definido no gerenciador de filas QM1.

DEFINE CHANNEL(TO.QM2) CHLTYPE(RCVR)

Teste

Na máquina mq1, execute o seguinte comando:

~$ /opt/mqm/samp/bin/amqsput Q2.W QM1
Sample AMQSPUT0 start
target queue is Q2.W
Hello, World!
end
End of messages
Sample AMQSPUT0 end

E, na máquina mq2:

~$ /opt/mqm/samp/bin/amqsget Q2.R QM2
Sample AMQSGET0 start
message <Hello, World!>
message <end>
message <End of messages>
^C

Isso é um embrulho.

Fique atento. No próximo post, falarei sobre o recurso de publicação/assinatura.


Artigo Original