【问题标题】:How queue is create in ActiveMQ?ActiveMQ 中的队列是如何创建的?
【发布时间】:2015-09-08 17:35:27
【问题描述】:

这是来自ActiveMQ HelloWorld Example 的代码 sn-p,用于使用 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 方法只会返回与手动创建的队列关联的对象?

【问题讨论】:

    标签: java jms activemq


    【解决方案1】:

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

    见:http://activemq.apache.org/how-do-i-create-new-destinations.html

    【讨论】:

      【解决方案2】:

      将您的 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
      

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

      【讨论】:

      • 您对我的查询非常清楚。但是我们可以从 java 中触发 ddl like create/drop table 语句,直到并且除非您明确拒绝 ddl 权限。对吗?
      猜你喜欢
      • 2012-12-10
      • 1970-01-01
      • 1970-01-01
      • 2015-04-21
      • 2021-08-08
      • 2013-11-18
      • 1970-01-01
      • 2018-12-22
      • 2018-08-03
      相关资源
      最近更新 更多