Enviando e recebendo mensagens de filas do Apache ActiveMQ com Java

Pré requisitos

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

Postagens mais visitadas deste blog

Bitbucket Pipeline CI/CD usando Git FTP

Desenvolvo sua página de negócio

Introdução ao PHP orientado a objeto