2011-12-28 297 views
3

任何人都可以幫助做java中獲取隊列深度的代碼。我們在IBM WebSphere MQ中有4個隊列,裏面有消息。檢查MQ隊列深度

我想寫一個jsp在運行報表時讀取隊列名稱及其深度。 我該怎麼做?

回答

0

我看到一個響應access queue with Websphere MQ API

你看的MBean accessibles在JMX方面?如果我必須這樣做,我會在Mbean中公開它。

你可以看到有IBM JMS Topologies

監測和檢查資源,如隊列深度的狀態下,有幾個選項。首選的方法是使用Application Serve提供的JMX Mbeans進行監視:JMSBasicFunction,JMSAdministration和EmbeddedJMSAdministration。 您可以通過wsadmin或編程方式訪問這些Mbeans。其次,您可以使用傳統的WMQ管理實用程序(例如runmqsc或MQExplorer)查看隊列和其他資源。如果確實使用這些實用程序,則不必對Application Server隊列管理器和隊列進行任何配置更改。這些資源受應用程序服務器的控制。在更改使用MQ實用程序導致非功能配置

不要這些資源,並知道如果你是一個WAS的服務器上,如果這仍然是相同的MBean,但你應該在你的AS找到等價的MBean。

2

請參閱http://blog.guymahieu.com/2008/06/11/getting-the-depth-of-an-mqseries-queue-from-java/

我重新實現了這個如下:

import com.ibm.mq.*; 

public class QueueManager { 

    private final String host; 
    private final int port; 
    private final String channel; 
    private final String manager; 
    private final MQQueueManager qmgr; 

    public QueueManager(String host, int port, String channel, String manager) throws MQException { 
     this.host = host; 
     this.port = port; 
     this.channel = channel; 
     this.manager = manager; 
     this.qmgr = createQueueManager(); 
    } 

    public int depthOf(String queueName) throws MQException { 
     MQQueue queue = qmgr.accessQueue(queueName, MQC.MQOO_INQUIRE | MQC.MQOO_INPUT_AS_Q_DEF, null, null, null); 
     return queue.getCurrentDepth(); 
    } 

    @SuppressWarnings("unchecked") 
    private MQQueueManager createQueueManager() throws MQException { 
     MQEnvironment.channel = channel; 
     MQEnvironment.port = port; 
     MQEnvironment.hostname = host; 
     MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES); 
     return new MQQueueManager(manager); 
    } 
} 

把下面的罐子在classpath:

  • com.ibm.mq *罐子
  • 的j2ee.jar
+0

放置在路徑中的特定jar不受支持並且是特定於版本的。在V8之前,如果您希望爲您的客戶提供支持,IBM需要完整的客戶端安裝。從v8.0開始,IBM有一個僅支持jar的客戶端配置,但這不是適合它的jar的正確列表。 – 2015-02-24 04:53:55

+0

這有幫助,我只需要將運輸模式更改爲綁定。 – 2015-09-07 13:44:48