2010-01-23 61 views
3

我覺得這可能是一個非常簡單的問題,但這是我第一次進入JMS,所以我有點不確定。我如何獲得現有的JMS隊列?

我正在嘗試寫入現有的JMS隊列(然後從另一個隊列讀取),爲此我知道隊列名稱,主機,隊列管理器和通道。我如何以javax.jms.Destination對象的形式獲得對此隊列的引用?

我發現的所有示例都涉及調用javax.jms.Session.createQueue(String),但由於此隊列已存在,我不想創建另一個,對吧?或者我誤解了正在發生的事情?

如果重要,我使用com.ibm.msg.client.jms驅動程序。

謝謝!

回答

4

通常,應用程序運行的容器將在其命名服務中綁定Queue。容器中的應用程序可以使用JNDI查找並使用它。

+0

謝謝!是否有可能從獨立的Java程序訪問隊列?最終,我將使用來自Java EE應用程序的隊列,但現在我只是試着更熟悉JMS。如果無法做到這一點,我可能會跳過這一步,但我希望有一些與Queue交互的代碼,而在我的應用程序中沒有任何其他複雜性。 – pkaeding 2010-01-23 04:24:18

+1

通常可以從獨立應用程序執行此操作,但細節取決於您正在使用的JMS提供程序。例如,許多應用程序服務器提供了一個JNDI提供程序和JMS驅動程序,您可以在應用程序服務器之外的應用程序中使用它來建立連接。 – erickson 2010-01-23 04:55:20

0

要添加埃裏克森的回答以上:

這是獲取和瀏覽JMS隊列的例子:(使用的javax.jms-API 2.X)

// Set up the connection to the queue: 
Properties env = new Properties(); 
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); 
env.put(Context.PROVIDER_URL, "http-remoting://<host>:<port>"); 
Context namingContext = new InitialContext(env); 
ConnectionFactory connectionFactory = (ConnectionFactory) namingContext.lookup("jms/RemoteConnectionFactory"); 
JMSContext context = connectionFactory.createContext("jms_user", "pwd"); 

// Get the JMS Queue: 
Queue queue = (Queue) namingContext.lookup("jms/queue/exampleQueue"); 
// Create the JMS Browser: 
QueueBrowser browser = context.createBrowser(queue); 
// Browse the messages: 
Enumeration<Message> e = browser.getEnumeration(); 
while (e.hasMoreElements()) { 
    Message message = (Message) e.nextElement(); 
    log.debug(message.getBody(String.class) + " with priority: " + message.getJMSPriority()); 
} 
... 

確保您使用這些Maven依賴項:

<dependency> 
    <groupId>javax.jms</groupId> 
    <artifactId>javax.jms-api</artifactId> 
    <version>2.0.1</version> 
</dependency> 
<dependency> 
    <groupId>org.wildfly</groupId> 
    <artifactId>wildfly-jms-client-bom</artifactId> 
    <version>10.0.0.Final</version> 
    <type>pom</type> 
</dependency>