2014-01-10 2 views
0

Я интегрирую Spring-4 и Active-MQ 5.8. Я написал небольшой тестовый код. Он отправляет сообщение правильно, но не выходит.Пружинное приложение не выходит с использованием JmsTemplate

Кодекс Отправитель

package sample.jms.activemq; 

import java.util.Map; 

import org.springframework.jms.core.JmsTemplate; 

public class MessageSender { 

    private final JmsTemplate jmsTemplate; 

    public MessageSender(final JmsTemplate jmsTemplate) { 
     this.jmsTemplate = jmsTemplate; 
    } 

    public void send(final Map map) { 
     jmsTemplate.convertAndSend(map); 
    } 

} 

** Файл конфигурации является **

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> 

    <!-- Activemq connection factory --> 
    <bean id="amqConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> 
     <constructor-arg index="0" value="pass"/> 
     <constructor-arg index="1" value="pass"/> 
     <constructor-arg index="2" value="tcp://queueURL:61616"/> 
    </bean> 

    <!-- ConnectionFactory Definition --> 
    <bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory"> 
     <constructor-arg ref="amqConnectionFactory" /> 
    </bean> 


    <!-- Default Destination Queue Definition--> 
    <bean id="defaultDestination" class="org.apache.activemq.command.ActiveMQQueue"> 
     <constructor-arg index="0" value="simplesample"/> 
    </bean> 

    <!-- JmsTemplate Definition --> 
    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> 
     <property name="connectionFactory" ref="connectionFactory" /> 
     <property name="defaultDestination" ref="defaultDestination" /> 
    </bean> 

    <!-- Message Sender Definition --> 
    <bean id="messageSender" class="sample.jms.activemq.MessageSender"> 
     <constructor-arg index="0" ref="jmsTemplate" /> 
    </bean> 

</beans> 

** Код Main Класс **

package sample.jms.activemq; 

import java.util.HashMap; 
import java.util.Map; 

import org.springframework.context.support.AbstractApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 

/** 
* 
*/ 
public class JMSMain { 

    public static void main(String a[]) { 
     AbstractApplicationContext context = new ClassPathXmlApplicationContext(
       "/sample/jms/resources/Spring-Module.xml"); 
     MessageSender sender = (MessageSender) context.getBean("messageSender"); 
     Map<String, String> map = new HashMap<String, String>(); 
     map.put("Name", "SampleName"); 
     sender.send(map); 
     System.out.println("Exiting"); 
     context.registerShutdownHook(); 

    } 
} 

ответ

1

Попробуйте добавить tcp://queueURL:61616?daemon=true вам config

JMS просто продолжает слушать сообщения, поэтому для его закрытия должен быть демон.

Смежные вопросы