我应该为bean定义中的ActiveMQTopic属性设置什么?

时间:2013-11-05 18:48:45

标签: java spring jms activemq

我正在使用ActiveMQ作为我的JMS代理。我有以下课程作为我的邮件发件人:

public class MyMessageSender {
    private JmsTemplate jmsTemplate;
    private Topic topic;

    public void setJmsTemplate(JmsTemplate jmsTemplate) {
        this.jmsTemplate = jmsTemplate;
    }

    public void setTopic(Topic topic) {
        this.topic = topic;
    }
}

在我的Spring bean配置文件中,我有:

<bean id="customerMessage" class="com.example.MyMessageSender">
    <property name="jmsTemplate" ref="jsmTemplateBean" />
    <property name="topic" ref="topicBean" />
</bean>

<bean id="jsmTemplateBean" class="org.springframework.jms.core.JmsTemplate">
    <constructor-arg ref="connectionFactoryBean" />
</bean>

<bean id="topicBean" class="org.apache.activemq.command.ActiveMQTopic">
    <constructor-arg value="**What to put here as the constructor arg?**" />
</bean>

我查了ActiveMQTopic的javadoc。有一个构造函数以String为参数。那么我应该在org.apache.activemq.command.ActiveMQTopic的bean定义中加入什么? javadoc没有说明该参数。我想也许这是主题名称?但是如何在ActiveMQ中指定它?

1 个答案:

答案 0 :(得分:3)

这实际上是主题名称。使用ActiveMQ,您无需明确设置或配置您需要的queues/topics。如果您尝试从任何队列或主题发布或订阅,它将在运行中静默创建。有时人们将目的地放入JNDI,以便他们可以通过他们的应用程序撤出,而无需知道真实的queue/topic名称。这很好,如果您愿意,可以将ActiveMQQueueActiveMQTopic对象添加到JNDI,但不是必需的。

因此,例如,如果您正在使用该配置:

<bean id="topicBean" class="org.apache.activemq.command.ActiveMQTopic">
    <constructor-arg value="my.topic" />
</bean>

订阅主题my.topic的每个应用程序都将收到以topicBean作为目标发送的消息。您不必在其他任何地方指定名称。

这是关于这个主题的documentation