В этом посте я опишу простую конфигурацию, необходимую ActiveMQ для настройки адаптера персистентности JDBC и настройки MySQL в качестве постоянного хранилища. При таком типе конфигурации вы также можете настроить настройку Master / Slave Broker, подключив более одного посредника к одному экземпляру базы данных.
Список бинарных файлов, используемых для этого примера
- MySQL-5.5.20-osx10.6-x86_64
- MySQL-разъем-Java-5.1.18-bin.jar
- апаша-ActiveMQ-5.5.1-предохранитель-01-13
Настройка 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 с сохранением базы данных.