Статьи

ActiveMQ: главный подчиненный JDBC с MySQL


В этом посте я опишу простую конфигурацию, необходимую ActiveMQ для настройки адаптера персистентности JDBC и настройки MySQL в качестве постоянного хранилища.
При таком типе конфигурации вы также можете настроить настройку Master / Slave Broker, подключив более одного посредника к одному экземпляру базы данных.

Список бинарных файлов, используемых для этого примера

Настройка MySQL

Загрузите и установите
MySQL .

Примечание для пользователей OS X: dmg предоставляет простую установку, которая содержит пакет Startup Item, который настроит MySQL для автоматического запуска после каждой перезагрузки, а также плагин Preference Pane, который будет добавлен на панель настроек, чтобы позволить вам запускать / останавливать и настроить автозапуск MySQL.

После того, как вы установили и правильно настроили MySQL, вам нужно запустить MySQL Monitor, чтобы создать пользователя и базу данных.

 macbookpro-251a:bin jsherman$ ./mysql -u root  
 Welcome to the MySQL monitor. Commands end with ; or \g.  
 Your MySQL connection id is 29  
 Server version: 5.5.20 MySQL Community Server (GPL)  
 Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.  
 Oracle is a registered trademark of Oracle Corporation and/or its  
 affiliates. Other names may be trademarks of their respective  
 owners.  
 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.  
 mysql>  

Затем создайте базу данных для ActiveMQ

 mysql> CREATE DATABASE activemq;  

Затем создайте пользователя и предоставьте ему привилегии для базы данных.

 mysql> CREATE USER 'activemq'@'%'localhost' IDENTIFIED BY 'activemq';  
 mysql> GRANT ALL ON activemq.* TO 'activemq'@'localhost';  
 mysql> exit  

Теперь войдите в MySQL Monitor и получите доступ к базе данных activemq с помощью пользователя activemq, чтобы убедиться, что все в порядке.

macbookpro-251a:bin jsherman$ ./mysql -u activemq -p activemq  
 Enter password:   
 Reading table information for completion of table and column names  
 You can turn off this feature to get a quicker startup with -A  
 Welcome to the MySQL monitor. Commands end with ; or \g.  
 Your MySQL connection id is 28  
 Server version: 5.5.20 MySQL Community Server (GPL)  
 Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.  
 Oracle is a registered trademark of Oracle Corporation and/or its  
 affiliates. Other names may be trademarks of their respective  
 owners.  
 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.  
 mysql>exit  

Конфигурация брокера ActiveMQ


Загрузите последнюю
версию FuseSource ActiveMQ .


В файле конфигурации посредника activemq.xml добавьте следующий адаптер персистентности для настройки соединения JDBC с MySQL.

 <persistenceAdapter>  
     <jdbcPersistenceAdapter dataDirectory="${activemq.base}/data" dataSource="#mysql-ds"/>  
  </persistenceAdapter>  

Затем сразу после конечного элемента брокера (</ broker>) добавьте следующий компонент
 <bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
   <property name="driverClassName" value="com.mysql.jdbc.Driver"/>  
   <property name="url" value="jdbc:mysql://localhost/activemq?relaxAutoCommit=true"/>  
   <property name="username" value="activemq"/>  
   <property name="password" value="activemq"/>  
   <property name="maxActive" value="200"/>  
   <property name="poolPreparedStatements" value="true"/>  
 </bean>  

Скопируйте дайвер MySQL в каталог lib ActiveMQ, 
 в этом примере использовался
mysql-connector-java-5.1.18-bin.jar .


Теперь запустите вашего брокера, вы должны увидеть следующий вывод при запуске из консоли

  INFO | Using Persistence Adapter: JDBCPersistenceAdapter(org.apache.commons.dbcp.BasicDataSource@303bc1a1)  
  INFO | Database adapter driver override recognized for : [mysql-ab_jdbc_driver] - adapter: class org.apache.activemq.store.jdbc.adapter.MySqlJDBCAdapter  
  INFO | Database lock driver override not found for : [mysql-ab_jdbc_driver]. Will use default implementation.  
  INFO | Attempting to acquire the exclusive lock to become the Master broker  
  INFO | Becoming the master on dataSource: org.apache.commons.dbcp.BasicDataSource@303bc1a1  
  INFO | ActiveMQ 5.5.1-fuse-01-13 JMS Message Broker (jdbcBroker1) is starting  

Теперь вы можете проверить свою базу данных в MySQL и увидеть, что ActiveMQ создал необходимые таблицы.

mysql> USE activemq; SHOW TABLES;  
 +--------------------+  
 | Tables_in_activemq |  
 +--------------------+  
 | ACTIVEMQ_ACKS   |  
 | ACTIVEMQ_LOCK   |  
 | activemq_msgs   |  
 +--------------------+  
 3 rows in set (0.00 sec)  
 mysql>  

Если вы сконфигурируете несколько посредников для использования одного и того же экземпляра базы данных в элементе jdbcPersistenceAdapter, то эти посредники попытаются получить блокировку, если они не смогут получить блокировку базы данных, будут ждать, пока блокировка не станет доступной. Это можно увидеть, запустив второго посредника с использованием описанной выше конфигурации персистентности JDBC.

  INFO | PListStore:activemq-data/jdbcBroker/tmp_storage started  
  INFO | Using Persistence Adapter: JDBCPersistenceAdapter(org.apache.commons.dbcp.BasicDataSource@78979f67)  
  INFO | Database adapter driver override recognized for : [mysql-ab_jdbc_driver] - adapter: class org.apache.activemq.store.jdbc.adapter.MySqlJDBCAdapter  

Как видите, второй посредник не полностью инициализировался, так как он ожидает получения блокировки базы данных. Если главный посредник убит, то вы видите, что ведомый получает блокировку базы данных и становится новым главным.

 INFO | Database lock driver override not found for : [mysql-ab_jdbc_driver]. Will use default implementation.  
  INFO | Attempting to acquire the exclusive lock to become the Master broker  
  INFO | Becoming the master on dataSource: org.apache.commons.dbcp.BasicDataSource@2e19fc25  
  INFO | ActiveMQ 5.5.1-fuse-01-13 JMS Message Broker (jdbcBroker2) is starting  
  INFO | For help or more information please see: http://activemq.apache.org/  
  INFO | Listening for connections at: tcp://macbookpro-251a.home:61617  
  INFO | Connector openwire Started  
  INFO | ActiveMQ JMS Message Broker (jdbcBroker2, ID:macbookpro-251a.home-53193-1328656157052-0:1) started  

Резюме

Как видите, довольно просто и просто настроить надежную высокодоступную систему обмена сообщениями, используя ActiveMQ с сохранением базы данных.