В сети великое множество мануалов, рассказывающие нам невероятную повесть о том, как подружить 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/, в эту же папку подкладываем файл module.xml

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 на:

  

	
		
			
			XATransaction
			
				tcp://localhost:61616?jms.rmIdFromConnectionId=true
			
			
				admin
			
			
				admin
			
			
				false
			
			
				
					
						1
						20
						false
						false
					
					
						1
					
					
						true
					
				
			
			
				
					TestQueue
				
				
					TestTopic
				
			
		
	

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

  

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

  

...
	
    	
    	...
	
... 

Пишем HelloWorld.war

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

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

Вы можете не указывать раздел в секции 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);  
  
		...
    }
}

Скачать конфиг
standalone-full.xml
31 КБ

Скачать конфиг
module.xml
1.8 КБ

Скачать приложение-пример
src-helloworld-activemq-mdb.zip
4.1 КБ