如何在ActiveMQ中创建队列?

时间:2014-02-26 17:15:31

标签: java jms activemq

以下是ActiveMQ HelloWorld Example中使用ActiveMQ

创建队列的代码段
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost");

   // Create a Connection
   Connection connection = connectionFactory.createConnection();
   connection.start();

   // Create a Session
   Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

   // Create the destination (Topic or Queue)
   Destination destination = session.createQueue("TEST.FOO");

根据ActiveMQ docs

  

此设施适用于客户需要的罕见情况   动态操纵队列标识

看起来开发人员不应该使用createQueue创建队列。如果是,开发人员应该如何创建队列?他应该用ui或其他方法创造而不是以编程方式进行创作吗?

然后它进一步说

  

此方法不适用于创建物理队列。身体上的   创建队列是一项管理任务,但不是   由JMS API发起。

我没有得到上述声明的意思?根据我的理解,开发人员应该手动编写队列。通过web ui或命令提示符。   createQueue方法只返回与手动创建的队列关联的对象吗?

2 个答案:

答案 0 :(得分:6)

在ActiveMQ中,您无需在使用之前创建目的地。 ActiveMQ代理根据需要创建与目标关联的物理资源,因此如果在JMS会话上调用createQueue(),它将为您创建队列(如果它尚不存在)。

请参阅:http://activemq.apache.org/how-do-i-create-new-destinations.html

答案 1 :(得分:3)

将您的JMS提供程序视为无法发出管理命令的数据库,例如“create table”或“drop table”。

有人必须为您执行这些管理任务,因此您的客户端代码可以访问这些表并执行选择,更新,删除等。

JMS是这样的。 JMS API不允许您创建新队列,只允许访问现有队列并向其添加内容(生产者)或从中删除内容(使用者)。

那么谁创建了队列?例如,如果您在某个应用程序服务器中运行嵌入式JMS实例,则队列在配置文件中定义,容器负责在启动时创建必要的结构,以便您可以使用它们。

或者,如果您使用的是JMS独立服务器,那么JMS实现当然有自己的API来执行此类操作,但在不同的JMS提供程序中,此过程并不符合标准。

以同样的方式,想一想SQL是一个标准,允许某人使用不同的DBMS做同样的事情,但同时,没有标准来管理这些DBMS。

我认为方法“createQueue()”是一个坏名称,因为它不是创建队列,而是创建一个Destination(实际上它返回的是)。 Destination是队列的逻辑抽象,您可以在其中插入使用者或生产者。但就是这样。只是对现有队列的引用。

现在回答你的问题:-)例如,使用tomee +,这是一个tomcat + JEE库,包含activeMQ,你可以运行一个嵌入式JMS实例并像这样使用它

http://tomee.apache.org/jms-resources-and-mdb-container.html

那么,如何创建队列?它由配置文件创建: - )

相关问题