JBoss A-MQ : Consumidor de mensagens utilizando protocolo fabric

Introdução

O Fuse Fabric discovery agent utiliza o protocolo fabric para a descoberta de brokers que estão em um grupo específico. Para que isto aconteça o discovery agent precisa que todos os brokers sejam implantados em somente uma fábrica. Quando um cliente tenta se conectar a um broker, o agent procura por todos os brokers disponíveis no registro do fabric e os retorna.

fabric_consumer

Características

  • O protocolo fabric garante failover automaticamente
  • Clientes não precisam saber onde os brokers estão localizados 
  • Funciona como o transporte failover
  • Oferece opções para reconexão:

discovery:(fabric:usa-group)?reconnectDelay=1000&useExponentialBackOff=false

  • Clientes precisam ter a URL do Zookeeper

Como configurar o broker

Para saber em detalhes como fazer o deploy de brokers utilizando o Fuse Fabric, dê uma olhada no post Cluster JBoss A-MQ : Master/Slave Network of Brokers utilizando Fuse Fabric.

 Como configurar o cliente

Para saber em detalhes como criar um client que envia mensagens para o Fuse Fabric, dê uma olhada no post JBoss A-MQ : Produtor de mensagens utilizando protocolo fabric.

Setando o zookeeper.url

Para que o cliente consiga encontrar corretamente o grupo de brokers, precisamos adicionar a propriedade zookeeper.url que indica a instância do Fuse Fabric’s Zookeeper, no meu caso rodando localmente adicionei no pom.xml do meu projeto:

<zookeeper.url>localhost:2181</zookeeper.url>
<zookeeper.password>admin</zookeeper.password>

Download do projeto completo

Consumer-teste.zip

Até o próximo post!


JBoss A-MQ : Produtor de mensagens utilizando protocolo fabric

Introdução

O Fuse Fabric discovery agent utiliza o protocolo fabric para a descoberta de brokers que estão em um grupo específico. Para que isto aconteça o discovery agent precisa que todos os brokers sejam implantados em somente uma fábrica. Quando um cliente tenta se conectar a um broker, o agent procura por todos os brokers disponíveis no registro do fabric e os retorna.

fabric_client

Características

  • O protocolo fabric garante failover automaticamente
  • Clientes não precisam saber onde os brokers estão localizados 
  • Funciona como o transporte failover
  • Oferece opções para reconexão:

discovery:(fabric:usa-group)?reconnectDelay=1000&useExponentialBackOff=false

  • Clientes precisam ter a URL do Zookeeper

Como configurar o broker

Para saber em detalhes como fazer o deploy de brokers utilizando o Fuse Fabric, dê uma olhada no post Cluster JBoss A-MQ : Master/Slave Network of Brokers utilizando Fuse Fabric.

 Como configurar o cliente

import javax.jms.Connection;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;

import org.apache.activemq.ActiveMQConnectionFactory;

public class ProducerTeste {

public static void main(String[] args) throws Exception {

ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(“discovery:(fabric:usa-group)“);

Connection connection = factory.createConnection(“admin”, “admin”);
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
connection.start();
Queue queue = session.createQueue(“SampleQueue”);
MessageProducer producer = session.createProducer(queue);

for (int i = 0; i < 1000; i++) {

producer.send(session.createTextMessage(i + ” message”));
System.out.println(“Sent message ” + i);
Thread.sleep(1000);
}
producer.close(); session.close(); connection.close();
}
}

Setando o zookeeper.url

Para que o cliente consiga encontrar corretamente o grupo de brokers, precisamos adicionar a propriedade zookeeper.url que indica a instância do Fuse Fabric’s Zookeeper, no meu caso rodando localmente adicionei no pom.xml do meu projeto:

<zookeeper.url>localhost:2181</zookeeper.url>
<zookeeper.password>admin</zookeeper.password>

Download do projeto completo

Producer-teste.zip

Até o próximo post!


Cluster JBoss A-MQ : Master/Slave Network of Brokers utilizando Fuse Fabric

Introdução

Fuse Fabric é um sistema distribuído de configuração, gerenciamento e provisionamento para Apache Karaf, Apache ActiveMQ, ServiceMix, Apache Camel para nuvem pública ou privada, que trabalha com a noção de perfis, onde cada cada perfil pode ser entendido como uma lista de configurações.
Todos os perfis são gravados no Apache Zookeeper que é um confiável coordenador de serviços distribuídos responsável por proparagar automaticamente as configurações atualizadas entre todos os nós, além de gerenciar o lock (bloqueio) de cada nó master.

Alguns benefícios:

  • Configuração centralizada entre rotas/brokers distribuídos;
  • Crescimento dinâmico o qual é essencial para ambientes de Cloud;
  • Alta Disponibilidade (HA) para aplicações de missão crítica;
  • Utiliza OGSi e Apache Karaf criação de novos brokers;
  • Provê ferramenta centralizada para configuração e monitoração (Fuse Management Console);

fabric_master_slave

Master/slave

Este tutorial mostra em detalhes como configurar e executar uma  ActiveMQ network of brokers master/slave utilizando o Fuse Management Console (FMC) para simplificar a configuração e execução dos múltiplos brokers que serão criados.
Nesta estratégia somente um broker pode ter o status master por vez, assim os slaves aguardam a parada do master para que um deles se torne o novo master.
Criar uma topologia Master-Slave with Fabric é muito fácil, basta criar múltiplos brokers em um mesmo grupo e o resto fica por conta do Fabric.
No nosso exemplo vamos criar quatro instâncias: duas USA e outras duas Japan. O primeiro broker que for iniciado será o master do seu lado, enquanto o outro será o slave.
Por default os brokers são persistentes, pois utitilizam o perfil mq-base como base.
Não é o caso deste exemplo, mas se as instâncias estiverem em máquinas separadas e utilizando storage compartilhado, precisaríamos de configurações adicionais. Por ora vamos montar o ambiente localmente.
O benefício deste tipo de configuração é que não é necessário nenhuma estratégia de lock em storage compartilhado mesmo utilizando brokers não persistentes, pois o Zookeeper garante o bloqueio dos nós master.

Obs: ainda assim há a necessidade de um message store compartilhado para que o estados dos brokers sejam garantidos.

Networks

A conexão entre os brokers dos dois grupos é especificado através da opção networks.

Instalação

1) Download

O Red Hat JBoss Fuse pode ser baixo aqui: https://www.jboss.org/products/fuse.html

Obs: disponível somente para fins de Desenvolvimento.

2) Descompactar

Descompacte o Fuse em algum lugar de sua preferência. No meu caso descopactei em /opt do meu Fedora 18.

Configuração

1) users.properties

Altere o arquivo $fuse-diretorio/etc/users.properties descomentando a linha:

#admin=admin,admin

2) system.properties

Altere o arquivo $fuse-diretorio/etc/system.properties substituindo localhost pelo hostname da máquina virtual. No meu caso é o maquina:

# Activemq configuration
activemq.port = 61616
activemq.host = maquina
activemq.url = tcp://${activemq.host}:${activemq.port}

Inicialização

Execute o seguinte arquivo $fuse-diretorio/bin 

./fuse 

fuse

Criando o cluster

Execute os seguintes comandos para criar e incializar o cluster:

1) Instala o FMC:

fabric:create -p fmc

2) Cria os dois containers usa:

fabric:container-create-child root usa 2

Jmx Login for root: admin 

Jmx Password for root: admin 

3) Cria os dois containers japan:

fabric:container-create-child root japan 2

4) O seguinte comando cria o par master/slave de brokers no grupo usa-group e o liga com os brokers japan através do linkToJapan:

fabric:mq-create --group usa-group --networks linkToJapan --networks-username admin --networks-password admin --assign-container usa1,usa2 amq-usa-profile

5) O seguinte comando cria o par master/slave de brokers no grupo japan-group e o liga com os brokers usa através do linkToUsa:

fabric:mq-create --group japan-group --networks linkToUsa --networks-username admin --networks-password admin --assign-container japan1,japan2 amq-japan-profile

6) Lista todos os clusters

fabric:cluster-list

Management Console

Acesse a seguinte URL: http://localhost:8181

1

Obs: se não estiver conseguindo acessar o Managente Console, execute o seguinte comando para instalar o FMC:  fabric:create -p fmc

No próximo post mostrarei como criar um Produtor e um Consumidor utilizando o protocolo fabric

Até o próximo post!