亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

求MQ的隊列深度

求MQ的隊列深度

慕俠2389804 2023-07-19 15:40:02
我想找到MQ當前的隊列深度。我的程序可以讀取和寫入隊列。我能夠編寫一個消費者來消費隊列中的消息。我可以使用計數器來計算隊列中有多少消息。但我需要找到隊列深度而不丟失消息。try {        // Create a connection factory        JmsFactoryFactory ff = JmsFactoryFactory.getInstance(WMQConstants.WMQ_PROVIDER);        JmsConnectionFactory cf = ff.createConnectionFactory();        // Set the properties        cf.setStringProperty(WMQConstants.WMQ_HOST_NAME, HOST);        cf.setIntProperty(WMQConstants.WMQ_PORT, PORT);        cf.setStringProperty(WMQConstants.WMQ_CHANNEL, CHANNEL);        cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);        cf.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, QMGR);        cf.setStringProperty(WMQConstants.WMQ_APPLICATIONNAME, "JmsPutGet (JMS)");        cf.setBooleanProperty(WMQConstants.USER_AUTHENTICATION_MQCSP, true);        cf.setStringProperty(WMQConstants.USERID, APP_USER);        cf.setStringProperty(WMQConstants.PASSWORD, APP_PASSWORD);        // Create JMS objects        context = cf.createContext();        destination = context.createQueue("queue:///" + QUEUE_NAME);        long uniqueNumber = System.currentTimeMillis() % 1000;        TextMessage message = context.createTextMessage("Your lucky number today is " + uniqueNumber);        producer = context.createProducer();        producer.send(destination, message);        System.out.println("Sent message:\n" + message);        consumer = context.createConsumer(destination); // autoclosable        String receivedMessage = consumer.receiveBody(String.class, 15000); // in ms or 15 seconds        System.out.println("\nReceived message:\n" + receivedMessage);        recordSuccess();    }代碼應該打印隊列深度。
查看完整描述

1 回答

?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

隊列深度可以通過瀏覽消息來統計。瀏覽不消耗消息。


Connection connection = connectionFactory.createConnection();

connection.start();


Session session = connection.createSession(false, Session.DUPS_OK_ACKNOWLEDGE);

Queue q = session.createQueue("exampe_queue");

QueueBrowser browser = session.createBrowser(q);

Enumeration enumeration = browser.getEnumeration();


long msgCounter = 0;

while (enumeration.hasMoreElements()) {

    Message msg = (Message) enumeration.nextElement();

    msgCounter += 1;

}


System.out.println("Queue depth: " + msgCounter);

然而,當客戶端從代理中提取消息時,這種方法非常慢。如果您需要偶爾檢查隊列深度以進行監控或類似目的,那么它會起作用。


更好的解決方案是使用 get-me-aq-depth 調用,但這不是 JMS api 指定的;然而,它通常存在于特定于實現的庫中。


查看完整回答
反對 回復 2023-07-19
  • 1 回答
  • 0 關注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號