use*_*603 4 java activemq-classic jms
以下是ActiveMQ HelloWorld的代码片段, 用于使用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");
Run Code Online (Sandbox Code Playgroud)
此工具适用于客户端需要动态操作队列标识的罕见情况
看起来开发人员不应该使用createQueue创建队列.如果是,开发人员应该如何创建队列?他应该用ui还是其他方式创造而不是用编程方式来做?
然后它进一步说
此方法不适用于创建物理队列.队列的物理创建是一项管理任务,不能由JMS API启动.
我没有得到上述声明的意思?根据我的理解,开发人员应该手动编写队列.通过web ui或命令提示符.createQueue方法只返回与手动创建的队列关联的对象?
在ActiveMQ中,您无需在使用之前创建目标.ActiveMQ代理根据需要创建与目标关联的物理资源,因此如果在JMS会话上调用createQueue(),它将为您创建队列(如果它尚不存在).
请参阅:http://activemq.apache.org/how-do-i-create-new-destinations.html
将 JMS 提供程序视为一个数据库,您无法发出管理命令,例如“创建表”或“删除表”。
必须有人为您执行这些管理任务,以便您的客户端代码可以访问这些表并执行选择、更新、删除等。
JMS就是这样的。JMS API 不允许您创建新队列,只能访问现有队列并向其添加内容(生产者)或从中删除内容(消费者)。
那么谁创建了队列呢?例如,如果您在某些应用程序服务器中运行嵌入式 JMS 实例,则队列是在配置文件中定义的,并且容器有责任在启动时创建必要的结构,以便您可以使用它们。
或者,如果您使用的是 JMS 独立服务器,那么 JMS 实现当然有自己的 API 来执行此类操作,但在不同的 JMS 提供商之间,此过程不是标准的。
以同样的方式,想想 SQL 是如何成为一个标准,允许某人使用不同的 DBMS 做完全相同的事情,但同时,如何管理这些 DBMS 却没有标准。
我认为“createQueue()”方法是一个坏名字,因为它不是创建队列,而是创建一个目的地(实际上是它返回的)。目的地是队列的逻辑抽象,您可以在其中插入消费者或生产者。但仅此而已。只是对现有队列的引用。
现在回答你的问题:-)例如,使用tomee+,它是一个tomcat + JEE库,包括activeMQ,你可以运行一个嵌入式JMS实例并像这样使用它
http://tomee.apache.org/jms-resources-and-mdb-container.html
Run Code Online (Sandbox Code Playgroud)
那么,队列是如何创建的呢?它是由配置文件创建的:-)
| 归档时间: |
|
| 查看次数: |
11107 次 |
| 最近记录: |