2014-02-26 57 views
2

這裏是代碼片段從ActiveMQ HelloWorld Example創建使用ActiveMQ的如何在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方法只會返回與手動創建的隊列關聯的對象?

回答

0

將您的JMS提供程序視爲不能發出管理命令(例如「create table」或「drop table」)的數據庫。

必須有人來執行這些管理任務給你,所以你的客戶端代碼可以訪問這些表格並執行選擇,更新,刪除等

JMS是這樣的。 JMS API不允許您創建新的隊列,只能訪問現有的隊列並向其添加內容(生產者)或從其中刪除(消費者)。

那麼誰創建隊列?例如,如果您正在某個應用程序服務器中運行嵌入式JMS實例,則隊列將在配置文件中定義,並且容器有責任在啓動時創建必要的結構,以便您可以使用它們。

或者,如果您使用的是JMS獨立服務器,那麼當然JMS實現有自己的API來執行此類操作,但在不同的JMS提供程序中,此過程不是standand。

以同樣的方式,思考SQL如何成爲一個標準,允許某人對不同的DBMS執行完全相同的操作,但同時又沒有關於如何管理這些DBMS的標準。我認爲方法「createQueue()」是一個壞名字,因爲它不是創建一個隊列,而是創建一個Destination(實際上是它返回的)。目標是可以插入用戶或生產者的隊列的邏輯抽象。但就是這樣。只是對現有隊列的引用。

現在回答你的問題:-)例如,使用tomee +,這是一個tomcat + JEE庫,ActiveMQ的inclusing,您可以運行嵌入式JMS實例,並使用它,就像這個

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

所以,隊列是如何創建的?它由配置文件創建:-)

+0

您已經提供了我的查詢很好的清晰度。但是我們可以像dddl一樣創建/刪除表格語句直到除非你明確否認ddl權限。右? – user3198603

+0

是的,你是對的 – Leo

相關問題