Enviando e recebendo mensagens de filas do Apache ActiveMQ com Java
Pré requisitos
- Introdução ao ActiveMQ
- ActiveMQ - Criando filas
- Conhecimento de Java básico
Produtor
Esse é o código do programa que vai enviar uma mensagem para o ActiveMQ:/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.mycompany.testeactivemq; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.Session; import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnection; import org.apache.activemq.ActiveMQConnectionFactory; /** * * @author fabricio */ public class Producer { // URL do servidor ActiveMQ // Nesse caso, o servidor é uma máquina virtual de teste que disponibilizei na rede private static String url = "tcp://192.168.220.37:61616"; // URL para um servidor local é : tcp://localhost:61616" private static String subject = "TEST.FOO"; //Nome da fila - aqui estou usando a fila padrão que já vem no ActiveMQ, mas você pode criar quantas filas quiser public static void main(String[] args) throws JMSException { // Iniciando a conexão JMS ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url); Connection connection = connectionFactory.createConnection(); connection.start(); //As mensagens serão enviadas e recebidas pela conexão JMS // Criando uma sessão não transacional // Para usar sessões transacionais, só setar o primeiro parâmetro para true Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); // Destination representa a fila ou o topic para onde a mensagem será enviada lembra que colocamos TEST.FOO? Destination destination = session.createQueue(subject); // MessageProducer é o objeto que vai enviar a mensagem. O oposto do MessageConsumer, que vai receber MessageProducer producer = session.createProducer(destination); // Estou enviando um texto de Bom dia TextMessage message = session.createTextMessage("Bom dia"); // Aqui producer.send(message); // E mostrando o texto na tela System.out.println("Enviando: '" + message.getText() + "'"); connection.close(); } } |
Consumidor
Agora o programa que vai receber essa mensagem. Pode estar em qualquer lugar da rede, inclusive na internet:package com.mycompany.consumer; /** * Hello world! * */ import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.Session; import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnection; import org.apache.activemq.ActiveMQConnectionFactory; /** * @author fabricio * */ public class Consumer { // URL do servidor ActiveMQ // Nesse caso, o servidor é uma máquina virtual de teste que disponibilizei na rede private static String url = "tcp://192.168.220.37:61616"; // URL para um servidor local é : tcp://localhost:61616" private static String subject = "TEST.FOO"; //Nome da fila - aqui estou usando a fila padrão que já vem no ActiveMQ, mas você pode criar quantas filas quiser public static void main(String[] args) throws JMSException { // Iniciando a conexão JMS ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url); Connection connection = connectionFactory.createConnection(); connection.start(); //As mensagens serão enviadas e recebidas pela conexão JMS // Criando uma sessão não transacional // Para usar sessões transacionais, só setar o primeiro parâmetro para true Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); // Destination representa a fila ou o topic para onde a mensagem será enviada lembra que colocamos TEST.FOO? Destination destination = session.createQueue(subject); // MessageConsumer será usado para receber a mensagem MessageConsumer consumer = session.createConsumer(destination); // Aqui ela é recebida Message message = consumer.receive(); // A propósito, há vários tipos de mensagens // Como o produtor enviou um TextMessage, você usará um TextMessage para usar ela no programa if (message instanceof TextMessage) { TextMessage textMessage = (TextMessage) message; System.out.println("Recebendo: '" + textMessage.getText() + "'"); } connection.close(); } } |
Como podemos perceber, não há segredo em lidar com ActiveMQ.
Bons estudos, javaneiros...
Fonte: Java Insider
Comentários
Postar um comentário