ActiveMQ
jeudi 29 novembre 2007
ActiveMQ est un broker de messages open source qui peut se présenter comme une bonne solution alternative à WebSphere MQ
Installation
- Télécharger la dernière version http://activemq.apache.org/download.html
- Diziper dans le répertoire de votre choix %ACTIVEMQ_HOME%
- Démarrer le script %ACTIVEMQ_HOME%/bin/activemq.bat
- Vérifier l’ouverture du port d’écoute:
netstat -an|find “61616” (sous Windows)
Création d’un consommateur de messages
Deux types de consommation de messages sont possibles:
- le mode publication / abonnement
- le mode queue de messages
- Dans cet exemple, je présente le mode publication / abonnement, le consommateur ne recoit qu’un message et se ferme:
package com.jfhelie.activemq;
import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.ExceptionListener;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
public class SimpleConsumer implements MessageListener, ExceptionListener {
private String user = ActiveMQConnection.DEFAULT_USER;
private String password = ActiveMQConnection.DEFAULT_PASSWORD;
private String url = ActiveMQConnection.DEFAULT_BROKER_URL;
private String subject = “TOOL.DEFAULT”;
private boolean transacted = false;
private Connection connection;
private Session session;
private MessageConsumer consumer;
public static void main(String[] args) throws Exception {
SimpleConsumer simpleConsumer = new SimpleConsumer();
simpleConsumer.run();
}
public void run() throws Exception {
// Create the connection
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
user, password, url);
connection = connectionFactory.createConnection();
connection.setExceptionListener(this);
connection.start();
// Create the session
session = connection
.createSession(transacted, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createTopic(subject);
// Create the consumer
consumer = session.createConsumer(destination);
consumer.setMessageListener(this);
System.out.println(“Consommateur de messages démarré”);
}
public void onMessage(Message message) {
if (message instanceof TextMessage) {
TextMessage txtMsg = (TextMessage) message;
try {
System.out.println(txtMsg.getText());
consumer.close();
session.close();
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
public void onException(JMSException exception) {
System.out.println(exception.getMessage());
}
}
Création d’un producteur de messages
- voici un exemple de producteur simple:
package com.jfhelie.activemq;
import javax.jms.Connection;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
public class SimpleProducer {
private String user = ActiveMQConnection.DEFAULT_USER;
private String password = ActiveMQConnection.DEFAULT_PASSWORD;
private String url = ActiveMQConnection.DEFAULT_BROKER_URL;
private String subject = “TOOL.DEFAULT”;
private boolean transacted = false;
private Destination destination;
public static void main(String[] args) throws Exception {
SimpleProducer producer = new SimpleProducer();
producer.run();
}
public void run() throws Exception {
// Create the connection
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(user, password, url);
Connection connection = connectionFactory.createConnection();
connection.start();
// Create the session
Session session = connection.createSession(transacted, Session.AUTO_ACKNOWLEDGE);
destination = session.createTopic(subject);
// Create the producer
MessageProducer producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
// Create the message
TextMessage message = session.createTextMessage(“Hello world”);
// Send the message
producer.send(message);
System.out.println(“Message envoyé par le producteur”);
producer.close();
session.close();
connection.close();
}
}
