簡體   English   中英

如何在ActiveMQ中創建隊列?

[英]How queue is create in ActiveMQ?

以下是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");

根據ActiveMQ文檔

此工具適用於客戶端需要動態操作隊列標識的罕見情況

看起來開發人員不應該使用createQueue創建隊列。 如果是,開發人員應該如何創建隊列? 他應該用ui還是其他方式創造而不是用編程方式來做?

然后它進一步說

此方法不適用於創建物理隊列。 隊列的物理創建是一項管理任務,不能由JMS API啟動。

我沒有得到上述聲明的意思? 根據我的理解,開發人員應該手動編寫隊列。通過web ui或命令提示符。 createQueue方法只返回與手動創建的隊列關聯的對象?

在ActiveMQ中,您無需在使用之前創建目標。 ActiveMQ代理根據需要創建與目標關聯的物理資源,因此如果在JMS會話上調用createQueue(),它將為您創建隊列(如果它尚不存在)。

請參閱: http//activemq.apache.org/how-do-i-create-new-destinations.html

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM