您如何使用Spring JMS收听JMS主题

时间:2014-07-23 21:23:31

标签: java jms hornetq spring-jms jms-topic

我有一个HornetQ服务器,它有主题和队列。我不知道另一方的配置,但我连接到队列的方式是:

<bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiTemplate" ref ="jndiTemplate"/>
    <property name="jndiName" value="ConnectionFactory"/>
</bean>

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory" ref="connectionFactory"/>
    <property name="defaultDestination" ref="destination"/>
    <property name="pubSubDomain" value="false"/>
    <property name="deliveryPersistent" value="true"/>
    <property name="deliveryMode" value="2"/>
</bean>

<bean id="destination" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiTemplate" ref="jndiTemplate"/>
    <property name="jndiName" value="QUEUE_NAME"/>
</bean>

<!-- Listener Asynchronous -->
<bean id="queueListener" class="com.my.queueListener"/>

<jms:listener-container concurrency="5-10">
             <jms:listener destination="QUEUE_NAME" ref="queueListener"/>
</jms:listener-container>

我已将pubSubDomain设置为true并且它有效(奇怪但真实)。无论如何,现在我想连接到一个主题。我将pubSubDomain设置为true,但仍然显示错误

  

警告:JMS消息侦听器调用程序的设置失败,因为目标&#39; Activate_NTD&#39; - 试图恢复。原因:没有名称为TOPIC_NAME的队列

我知道HornetQ的行为有点不同,如下所示:

exact example for JMS Topic in HornetQ

但我无法弄清楚该做什么以及如何使其发挥作用。

1 个答案:

答案 0 :(得分:1)

在默认为队列的容器上设置destination-type,类似于

<jms:listener-container destination-type="topic" concurrency="5-10">
         <jms:listener destination="TOPIC_NAME" ref="topicListener"/>
</jms:listener-container>