Getting Started ActiveMQ

Quando o assunto é filas, o ActiveMQ se mostra como um dos mais populares e poderosos message broker open source do mercado. Sozinho ou através de outras ferramentas como por exemplo o Fuse ESB da Red Hat, você ainda irá se deparar com ele.
A seguir mostro um pequeno Hello Word com o ActiveMQ.

Instalando o ActiveMQ.
Faça download do activeMQ no site .
Para este Hello Word eu usei a versão 5.8.0.

Descompacte o pacote baixado em um local qualquer. Procure a pasta /bin e execute o comando activemq.

Meu exemplo foi feito em uma maquina windows e eu descompactei o activeMQ na pasta c:\ambiente_desenv, por isso para iniciar-lo rodei no prompt o sequinte comando:

   C:\ambiente_desenv\apache-activemq-5.8.0\bin\activemq

Quando o activeMQ iniciar você pode acessar a admin console para verificar se eles esta no ar. A url defaul da admin console é http://localhost:8161/admin/
O usuário default para acesso a console é o user: admin, password: admin

Agora com o ActiveMQ no ar você pode criar um consumidor e um produtor de mensagens e aproveitar o ActiveMQ.

Implementando o Hello World
As mensagens são objetos que contém os dados que são transferidos entre os clientes JMS. Os cliente JMS são as classes que produzem e consomem as mensagem.

Enviando uma mensagem
O código abaixo envia uma mensagem para uma fila chamada MINHA_FILA no ActiveMQ. note que esta fila ainda não existe, por isso ela será criada automaticamente durante o envio da mensagem.

import javax.jms.*;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

public class Producer {
    // URL do servidor JMSr. DEFAULT_BROKER_URL irá dizer que o server está no localhost
    private static String url = ActiveMQConnection.DEFAULT_BROKER_URL;
    
    //Nome da fila para onde enviaremos a mensagem
    private static String subject = "MINHA_FILA";

    public static void main(String[] args) throws JMSException {
        // Obtem uma conexão com o servidor JMS
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
        Connection connection = connectionFactory.createConnection();
        connection.start();


        // Mensagens JMS são enviadas usando uma sessão. Nós criaremos aqui uma sessão não transacional, informando false para o primeiro parametro 
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

        //Destination é a fila para onde as mensagens serão enviadas. Se não existir a fial ela sera criada automaticamente.
        Destination destination = session.createQueue(subject);
        MessageProducer producer = session.createProducer(destination);
        TextMessage message = session.createTextMessage("HELLO WORLD");

        // envia a mensagem
        producer.send(message);
        System.out.println("Mensagem enviada");

        connection.close();
    }
}

Após executar a classe Producer, se você acessar admin console você verá que a fila foi criada e que consta na coluna Number Of Pending Messages o numero 1, indicando que há uma mensagem na fila.
Você pode clicar na fila e navegar por ela para consultar sua mensagem.

Consumindo uma mensagem
O código abaixo representa um consumidor que irá recuperar uma mensagem na fila chamada MINHA_FILA.

import javax.jms.*;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

public class Consumer {
    
    private static String url = ActiveMQConnection.DEFAULT_BROKER_URL;

    private static String subject = "MINHA_FILA";

    public static void main(String[] args) throws JMSException {
       
        ConnectionFactory connectionFactory
            = new ActiveMQConnectionFactory(url);
        Connection connection = connectionFactory.createConnection();
        connection.start();

        // Cria sessão para enviar a mensagem
        Session session = connection.createSession(false,
            Session.AUTO_ACKNOWLEDGE);

        Destination destination = session.createQueue(subject);
        
        MessageConsumer consumer = session.createConsumer(destination);
        
        Message message = consumer.receive();

    
        if (message instanceof TextMessage) {
            TextMessage textMessage = (TextMessage) message;
            System.out.println("Recebi: '"
                + textMessage.getText() + "'");
        }
        connection.close();
    }
}

Se você executou a classe Producer e depois a classe Consumer, você deverá receber este retorno :

Recebi: ‘HELLO WORLD’

Referências:
Apache ActiveMQ

Anúncios

Uma resposta para “Getting Started ActiveMQ

  1. Artigo muito bom!
    Na minha fila eu preciso fazer um serviço(java) que verifique se a fila está online, caso não esteja eu precisarei iniciar a fila, estou procurando a 2 dias e não consigo, você consegue fazer?
    Valeu!

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s