这个问题来自here但可能是一个完全独立的问题。
我使用Spring 2.5.2和activemq 5.2.0进行单元测试。我使用“vm:// localhost”创建一个代理(useJmx为true),向“myTopic1”发出一些消息,打开一个jconsole到这个进程,我看到org.apache.activemq下的MBeans - > localhost - >主题 - > ActiveMQ.Advisory.Producer.Queue.myTopic1。这是咨询主题(当生产者/消费者加入时)。但我没有看到专门用于myTopic1本身的MBean。
当我单独运行activemq并使用我的Java程序连接它时,情况似乎并非如此。例如,我下载了ActiveMQ 5.2.0,修改了activemq.xml以使用createConnector = true。我启动了activeMQ向“myTopic1”发送了一条消息。我解雇了连接到使用“localhost:1099”的jconsole,我在org.apache.activemq下看到了一个JMX Bean - > localhost - >主题 - > myTopic1(除咨询主题外)。这有权告诉我有多少消息被触发。
我在这里遗漏了什么吗?为什么JMX bean与vm:// localhost(内置代理创建)与本地启动的activemq服务器不同?
答案 0 :(得分:0)
显然这只是我。线索在上面创建的“ActiveMQ.Advisory.Producer.Queue.myTopic1”JMX中。我使用以下签名,
jmsTemplate.send("topic1", textMessage);
现在我知道当我们使用String目标名称时,Spring默认将它发送到队列。所以“topic1”被视为队列名称(而不是主题)。我将代码更改为
Topic topic = //physically look up the topic
jmsTemplate.send(topic, textMessage);
现在可以使用了。