ActiveMQ

De Wiki.

Aller à : Navigation, rechercher

Sommaire

Apache ActiveMQ est courtier de messages distribué sous licence libre.

1 Installation

Procédure d'installation basique permettant d'avoir un serveur autonome, ou pouvant servir de base pour un mode cluster.

1.1 Installation sur RHEL 6

# yum install java-1.6.0-sun
# groupadd -g 92 activemq && useradd -u 92 -g 92 -m activemq
# cd /opt
# tar zxvf ~/apache-activemq-5.5.1-bin.tar.gz
# chown -R activemq.activemq /opt/apache-activemq-5.5.1/
# ln -s apache-activemq-5.5.1 activemq
# ln -s /opt/activemq/bin/activemq /etc/init.d/activemq
# vi /etc/init.d/activemq
#!/bin/sh
# chkconfig: 2345 92 8
# description: Apache ActiveMQ server
(...)
# chkconfig --add activemq
# ls -l /etc/rc*.d/*activemq
lrwxrwxrwx 1 root root 18 15 mars  14:10 /etc/rc0.d/K08activemq -> ../init.d/activemq
lrwxrwxrwx 1 root root 18 15 mars  14:10 /etc/rc1.d/K08activemq -> ../init.d/activemq
lrwxrwxrwx 1 root root 18 15 mars  14:10 /etc/rc2.d/S92activemq -> ../init.d/activemq
lrwxrwxrwx 1 root root 18 15 mars  14:10 /etc/rc3.d/S92activemq -> ../init.d/activemq
lrwxrwxrwx 1 root root 18 15 mars  14:10 /etc/rc4.d/S92activemq -> ../init.d/activemq
lrwxrwxrwx 1 root root 18 15 mars  14:10 /etc/rc5.d/S92activemq -> ../init.d/activemq
lrwxrwxrwx 1 root root 18 15 mars  14:10 /etc/rc6.d/K08activemq -> ../init.d/activemq
# vi /etc/default/activemq
ACTIVEMQ_USER="activemq"
# service activemq start
INFO: Loading '/etc/default/activemq'
INFO: Using java '/usr/bin/java'
INFO: Starting - inspect logfiles specified in logging.properties and log4j.properties to get details
INFO: changing to user 'activemq' to invoke java
INFO: pidfile created : '/opt/activemq/data/activemq.pid' (pid '16665')

2 Cluster Master/Slave JDBC sur RHEL 6

2.1 Principe

Dans ce mode de clustering, un seul serveur est actif à un moment donné, et un ou plusieurs serveurs sont en attente de prendre son rôle.

Pour garantir cela, chaque serveur qui démarre se connecte à la base de données via JDBC et tente d'obtenir un verrou, avec une requête du genre:

 SELECT * FROM ACTIVEMQ_LOCK FOR UPDATE

Celui qui obtient le verrou (normalement le 1er arrivé) continue son démarrage et fourni le service. Les autres se retrouvent à attendre le verrou.

Si le serveur actif subit un incident (perte de connexion JDBC, plantage, ...), un des autres serveurs obtient immédiatement le verrou et devient le serveur actif.

Avec cette configuration les clients doivent se connecter en utilisant la couche failover, exemple:

failover:(tcp://srv01:61616,tcp://srv02:61616)

2.2 Procédure

2.2.1 Base de données

Se connecter au serveur MySQL et:

mysql> create database activemq;
Query OK, 1 row affected (0.00 sec)
mysql> grant all privileges on activemq.* to 'activemq'@'%' identified by '<PASSWORD>';
Query OK, 0 rows affected (0.03 sec)

Note: Les tables seront créées automatiquement au lancement d'un serveur ActiveMQ

2.2.2 ActiveMQ

Sur chaque futur serveur du cluster, suivre la procédure d'installation de base; voir ActiveMQ#Installation

2.2.3 Connecteur JDBC

Télécharger le connecteur JDBC MySQL:

Puis sur chaque serveur ActiveMQ du cluster:

# cp mysql-connector-java-5.1.13-bin.jar /opt/activemq/lib/

2.2.4 Configuration

Sur chaque serveur ActiveMQ du cluster:

# service activemq stop
INFO: Loading '/etc/default/activemq'
INFO: Using java '/usr/bin/java'
INFO: changing to user 'activemq' to invoke java
INFO: Waiting at least 30 seconds for regular process termination of pid '8867' :
Java Runtime: Sun Microsystems Inc. 1.6.0_31 /usr/lib/jvm/java-1.6.0-sun-1.6.0.31.x86_64/jre
  Heap sizes: current=251264k  free=249951k  max=251264k
    JVM args: -Xms256M -Xmx256M -Dorg.apache.activemq.UseDedicatedTaskRunner=true -Djava.util.logging.config.file=logging.properties -Dactivemq.classpath=/opt/activemq/conf; -Dactivemq.home=/opt/activemq -Dactivemq.base=/opt/activemq
ACTIVEMQ_HOME: /opt/activemq
ACTIVEMQ_BASE: /opt/activemq
Connecting to pid: 8867
Stopping broker: srv01
. FINISHED
# vim conf/activemq.xml
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.base}/data" destroyApplicationContextOnStop="true">

devient

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="srv01" dataDirectory="${activemq.base}/data" destroyApplicationContextOnStop="true">
<persistenceAdapter>
    <kahaDB directory="${activemq.base}/data/kahadb"/>
</persistenceAdapter>

devient:

<persistenceAdapter>
    <jdbcPersistenceAdapter dataSource="activemq-ds"/>
</persistenceAdapter>
<bean id="activemq-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://<DB_SERVER>/activemq?relaxAutoCommit=true"/>
    <property name="username" value="activemq"/>
    <property name="password" value="<PASSWORD>"/>
    <property name="poolPreparedStatements" value="true"/>
</bean>
# service activemq start
INFO: Loading '/etc/default/activemq'
INFO: Using java '/usr/bin/java'
INFO: Starting - inspect logfiles specified in logging.properties and log4j.properties to get details
INFO: changing to user 'activemq' to invoke java
INFO: pidfile created : '/opt/activemq/data/activemq.pid' (pid '12870')

2.3 Références

Récupérée de « http://kerlinux.org/wiki/ActiveMQ »
Outils personnels
Espaces de noms
Variantes
Actions
Navigation
Liens
Boîte à outils