ActiveMQ 5 + Wildfly 11

Пытаемся подружить ActiveMQ и WildFly

В сети великое множество мануалов, рассказывающие нам невероятную повесть о том, как подружить ActiveMQ и WildFly. Но в основном, они все на английском и не работают. Из 8 прочитанных мной мануалов, 8 не привели меня к победе, конечно, в них было много полезного. Возможно, так обстоят дела потому, что все описывают работу с разными версиями, вот и мне пришлось пройтись по этим граблям.

Установка сервера ActiveMQ

Если сервер ActiveMQ у вас уже стоит, смело пропускайте эту часть. На момент выхода статьи, доступен ActiveMQ версии 5.

1) Скачаем сервер ActiveMQ с официального сайта и куда-нибудь распакуем.

2) Определим пользователей в файле conf/jetty-realm.properties, используя образец внутри.

Сервер ActiveMQ кроссплатформенное приложение и в папке bin находим версии для Windows и Linux.

3) Запустим скрипт с параметром start.

cd bin
./activemq start

4) Если все сделано верно, можно посетить админку http://localhost:8161/admin/

Админская панель ActiveMQ, сразу после устновки
Админская панель ActiveMQ, сразу после устновки

О WildFly

Все описанное далее выполнялось и проверялось на чистой копии WildFLy 11, запущенной в режиме standalone и взятой с официального сайта . Адаптер ActiveMQ требует профиля WildFly уровня не ниже full, поэтому необходимо запускать WildFly c параметром -c standalone-full.xml

cd bin
./standalone.sh -c standalone-full.xml

Устанавливаем Resource Adapter

1) Получим с официального сайта файл activemq-rar-5.11.1.rar, для данного мануала нужна именно эта версия.

Не путать с архиватором Александра Рошала, в данном случае расширение rar указывает на специальный тип файла resource adapter, который традиционно упакован в zip. Да, да! Файл с расширением rar, является архивом zip.

2) Распакуем содержимое activemq-rar-5.11.1.rar в папку modules/org/apache/activemq/ra/main/, в эту же папку подкладываем файл Скачать 1.8 КБmodule.xml - файл, с прописанными зависимостями, устанавливаемого модуля в WildFly, приложенный подходит только для версии адаптера 5.11.1, для другой версии адаптера вы можете сделать его самостоятельно, по аналогии.

3) Задеплоим файл activemq-rar-5.11.1.rar на WildFly, подложив его в папку standalone/deployments.

4) Поправим конфиг standalone-full.xml, располагающийся в папке standalone/configuration.

5) Заменим секцию urn:jboss:domain:resource-adapters на:

<subsystem xmlns="urn:jboss:domain:resource-adapters:5.0">
	<resource-adapters>
		<resource-adapter id="activemq">
			<module slot="main" id="org.apache.activemq.ra"/>
			<transaction-support>XATransaction</transaction-support>
			<config-property name="ServerUrl">
				tcp://localhost:61616?jms.rmIdFromConnectionId=true
			</config-property>
			<config-property name="UserName">
				admin
			</config-property>
			<config-property name="Password">
				admin
			</config-property>
			<config-property name="UseInboundSession">
				false
			</config-property>
			<connection-definitions>
				<connection-definition class-name="org.apache.activemq.ra.ActiveMQManagedConnectionFactory" jndi-name="java:/ConnectionFactory" enabled="true" pool-name="ConnectionFactory">
					<xa-pool>
						<min-pool-size>1</min-pool-size>
						<max-pool-size>20</max-pool-size>
						<prefill>false</prefill>
						<is-same-rm-override>false</is-same-rm-override>
					</xa-pool>
					<timeout>
						<idle-timeout-minutes>1</idle-timeout-minutes>
					</timeout>
					<validation>
						<background-validation>true</background-validation>
					</validation>
				</connection-definition>
			</connection-definitions>
			<admin-objects>
				<admin-object class-name="org.apache.activemq.command.ActiveMQQueue" jndi-name="java:/queue/TestQueue" use-java-context="true" pool-name="TestQueue">
					<config-property name="PhysicalName">TestQueue</config-property>
				</admin-object>
				<admin-object class-name="org.apache.activemq.command.ActiveMQTopic" jndi-name="java:/topic/TestTopic" use-java-context="true" pool-name="TestTopic">
					<config-property name="PhysicalName">TestTopic</config-property>
				</admin-object>
			</admin-objects>
		</resource-adapter>
	</resource-adapters>
</subsystem>

6) Заменим секцию urn:jboss:domain:messaging-activemq на:

<subsystem xmlns="urn:jboss:domain:messaging-activemq:2.0"/>

7) Изменим секцию urn:jboss:domain:ejb3:

<subsystem xmlns="urn:jboss:domain:ejb3:5.0">
...
	<mdb>
		<resource-adapter-ref resource-adapter-name="activemq"/>
		...
	</mdb>
...
</subsystem>

Пишем HelloWorld.war

В этот раз, я не буду приводить весь код, но отмечу основные моменты. Вы можете сразу скачать Скачать 4.1 КБsrc-helloworld-activemq-mdb.zipСкачать 4.1 КБsrc-helloworld-activemq-mdb.zip . Отправка сообщений производится силами встроенного сервлета, достаточно пройти по адресу http://localhost:8080/helloworld-activemq-mdb/jms/. Если всё настроено верно, в консоле WildFly появится тестовое сообщение.

Приём сообщений.

Вы можете не указывать раздел <admin-objects> в секции urn:jboss:domain:resource-adapters, если требуется реализовать исключительно приём сообщений.

@MessageDriven(name = "TestQueue", activationConfig = {
		@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
		@ActivationConfigProperty(propertyName = "destination", propertyValue = "TestQueue"),
		@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") })
public class Consumer implements MessageListener {
	public void onMessage(Message rcvMessage) {
		...
	}
}

Отправка сообщений:

public class Producer extends HttpServlet {
    @Resource(lookup = "java:/ConnectionFactory")
    ConnectionFactory cf;

    @Resource(lookup = "java:/queue/TestQueue")
    private Queue queue;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Connection connection =  null;
		connection = cf.createConnection();
		Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
		MessageProducer publisher = session.createProducer(queue);
		connection.start();

		TextMessage message = session.createTextMessage("Hello!");
		publisher.send(message);

		...
    }
}

Скачать 31.0 КБstandalone-full.xml
Скачать 1.8 КБmodule.xml
Скачать 4.1 КБsrc-helloworld-activemq-mdb.zip

Можно поставить столько лайков, сколько хочешьСколько хочешь лайков — столько и ставь
0просмотров

Комментарии