如何在运行时在JMS中创建物理队列

时间:2011-06-22 10:37:48

标签: jms

想知道如何在运行时在JMS中创建物理队列。 当我搜索这个时,我得到Creating JMS Queues at runtime

但是当我读到http://activemq.apache.org/how-do-i-create-new-destinations.html时,我开始知道Creating JMS Queues at runtime中提到的队列在服务器端没有创建任何物理队列。

如果我错了,请纠正我。如果有人知道在运行时创建物理队列,请重播。

提前致谢。

2 个答案:

答案 0 :(得分:0)

JMS标准没有解决“正常”队列的创建问题。根据您的目的,有两种方法:

  • 使用临时队列 - >但是它们有很多限制,最常见的是它们用于请求 - 回复场景
  • 使用JMS提供程序的API - 但是您的解决方案将依赖于此特定提供程序

答案 1 :(得分:0)

JMS标准仅处理从队列和主题等对象发送和接收数据。 JMS人工制品的创建是特定于供应商的,并且通常需要使用:

1)特定供应商API(不是JMS)

2)针对JMS服务器的命令/管理员消息(activemq上的命令代理)

3)JMX API

我使用的是JMX方法,它是最强大的,也是最有效的方法。

activemq的JMX方法(版本5.0 +)

a)JMS服务器设置

1)在activemq启动脚本和activemq.xml文件中启用JMX

2)如果您要对服务器进行身份验证,请确保您的用户在activemq.xml中设置了 admin 权限(请参阅http://activemq.apache.org/security.html

3)重启activemq服务器

b)您的客户代码

1)创建org.apache.activemq.broker.jmx.BrokerViewMBean的实例(您需要连接一些有点混乱的JMX连接代码)

2)使用其addQueue方法。这将在服务器上创建一个队列

(这个过程类似于hornetq但是因为你提到了Activemq我在这里省略了hornetq细节。)

我自己使用过这种方法,但它确实有效。

另一种方法是在Activemq中使用命令代理,但我对这些没有个人经验。这些特殊消息包含管理命令,也可以执行您想要的操作。