Статьи

Приложение JMS Sender с ActiveMQ и Maven

Мы уже видели, как создать приложение JMS Receiver с ActiveMQ и Maven . Давайте посмотрим, как мы можем аналогичным образом создать приложение JMS Sender .

Файл web.xml остается тем же, что мы использовали для создания приложения-получателя:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                        http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
                        version="3.0">
                         
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/jmsContext.xml</param-value>
    </context-param>
  
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
</web-app>

jmsContext.xml будет немного изменен на что-то вроде:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?xml version="1.0" encoding="UTF-8"?>
  
    <bean id="connectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory">
        <property name="brokerURL" value="tcp://localhost:61616" />
    </bean>
  
    <!-- <jms:listener-container container-type="default"
        connection-factory="connectionFactory" acknowledge="auto">
        <jms:listener destination="testQueue" ref="simpleMessageListener"
            method="onMessage" />
    </jms:listener-container> -->
  
    <!-- To send JMS message -->
    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory" ref="connectionFactory" />
        <property name="defaultDestinationName" value="testQueue"/>
    </bean>
     
    <bean id="simpleMessageSender" class="com.jcombat.sender.SimpleMessageSender">
        <property name="jmsTemplate" ref="jmsTemplate" />
    </bean>
</beans>

Обратите внимание, что мы добавили два новых bean-компонента для класса jmsTemplate и messageSender , которые будут использовать экземпляр jmsTemplate для отправки сообщения в очередь назначения.

Теперь давайте создадим класс отправителя сообщения SimpleMessageSender.java , который фактически будет отправлять сообщение:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.jcombat.sender;
  
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
  
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
  
public class SimpleMessageSender {
  
    private JmsTemplate jmsTemplate;
     
    public void setJmsTemplate(JmsTemplate jmsTemplate) {
        this.jmsTemplate = jmsTemplate;
    }
  
    public void sendMessage(final String message){ 
        jmsTemplate.send(new MessageCreator(){ 
            @Override 
            public Message createMessage(Session session) throws JMSException { 
                return session.createTextMessage(message); 
            }
        }); 
    
}

Почти сделано. Теперь давайте создадим клиентский класс TestClient.java , который получит bean-компонент simpleMessageSender из jmsContext и отправит некоторую строку сообщения, вызвав его метод sendMessage , таким образом, отбросив сообщение в настроенную очередь testQueue (как видно из выделенного содержимого файла jmsContext, показанного выше) ,

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
package com.jcombat.client;
  
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
  
import com.jcombat.sender.SimpleMessageSender;
  
public class TestClient {
  
    @SuppressWarnings("resource")
    public static void main(String[] args) throws Exception {
        ApplicationContext jmsContext = null;
        jmsContext = new FileSystemXmlApplicationContext(
                "path/to/jmsContext.xml");
        SimpleMessageSender messageSender = (SimpleMessageSender) jmsContext
                .getBean("simpleMessageSender");
  
        // Create a session within the connection.
        messageSender.sendMessage("hello");
    }
}

Теперь запустите класс TestClient как приложение Java.

Проверить сообщение в очереди назначения

Чтобы убедиться, что сообщение, которое мы отправили через наш клиентский класс, успешно прибыло в очередь назначения, т.е. testQueue , войдите в консоль Hawtio и из очередей, перечисленных слева, нажмите ссылку testQueue , в которой отображаются подробности testQueue по Основная область контента, как можно увидеть ниже:

snapSed

Теперь нажмите на сообщение, которое можно увидеть в списке на вкладке «Обзор». Мы могли видеть то же самое сообщение, которое мы отправили:

живица

Ссылка: Приложение JMS Sender с ActiveMQ и Maven от нашего партнера JCG Абхиманью Прасада в блоге jCombat .