以下是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");
此设施适用于客户需要的罕见情况 动态操纵队列标识
看起来开发人员不应该使用createQueue创建队列。如果是,开发人员应该如何创建队列?他应该用ui或其他方法创造而不是以编程方式进行创作吗?
然后它进一步说
此方法不适用于创建物理队列。身体上的 创建队列是一项管理任务,但不是 由JMS API发起。
我没有得到上述声明的意思?根据我的理解,开发人员应该手动编写队列。通过web ui或命令提示符。 createQueue方法只返回与手动创建的队列关联的对象吗?
答案 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
那么,如何创建队列?它由配置文件创建: - )