1

我使用 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 。有一个以 aString作为参数的构造函数。那么我应该在 bean 定义中添加org.apache.activemq.command.ActiveMQTopic什么?javadoc 没有说明该参数。我想可能是主题名称?但是如何在 ActiveMQ 中指定它呢?

4

1 回答 1

3

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

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

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

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

这是有关该主题的文档。

于 2013-11-05T21:38:45.610 回答