我正在使用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中指定它? 最佳答案
那实际上是主题名称。使用ActiveMQ
,您无需显式设置或配置所需的queues/topics
。如果您尝试从任何队列或主题发布或订阅,则它将在运行时以静默方式创建。有时人们将目的地放入JNDI
中,以便可以通过应用程序将其删除,而无需知道真实的物理queue/topic
名称。很好,您可以根据需要将ActiveMQQueue
和ActiveMQTopic
对象添加到JNDI
中,但这不是必需的。
因此,例如,如果您正在使用该配置:
<bean id="topicBean" class="org.apache.activemq.command.ActiveMQTopic">
<constructor-arg value="my.topic" />
</bean>
订阅主题
my.topic
的每个应用程序都将收到以topicBean
为目的地发送的消息。您无需在其他任何地方指定名称。这是关于该主题的documentation。