導航:首頁 > 編程語言 > javamq隊列

javamq隊列

發布時間:2022-08-24 08:15:39

1. 用java介面怎麼取MQ隊列深度

不知道用的是什麼Mq框架,如果是IBM的mq,應該可以通過MQMannager的getTotalMessageLength,getMessageLength獲取

2. Java 開源消息隊列ActiveMQ等

你這個Queue是一個在內存里的數據結構類,提供了入隊出隊方法。實例化以後可以使用。

MessageQueue是一個Java的協議,是基於標準的,ActiveMQ是這個協議標準的具體實現。這個隊列具有MessageQueue的通用功能,例如支持:發布者-訂閱者,點到點的多種方式。用於SOA的大型分布式環境,12306搶票的時候你看見有多少人排隊等待,就是使用的這個。

12306的後台伺服器是分布式的,比如接受訂票功能有100台伺服器,一個LinkedBlockingQueue的范圍只是一台機器,這樣的話就會出現多個隊,而且功能單一。這時候就會把訂票請求發送給MessageQueue ,這個東西是分布式、非同步的。。。。是完全不同的兩個東西,沒有可比性

3. mq java 怎麼判斷隊列為空

MQException
該類包含WebSphere MQ 完成代碼和錯誤代碼常量的定義。以MQCC_開始的常量是WebSphere MQ 完成代碼,而以MQRC_開始的常量則是WebSphere MQ 原因代碼。只要出現WebSphere MQ
錯誤,就會給出MQException。
MQGetMessageOptions
該類包含控制MQQueue.get()方法行為的選項。
MQManagedObject
該類是MQQueueManager、MQQueue 和MQProcess 類的超類。它提供查詢並設置這些資源屬性的能力。

------解決方案--------------------
去取一次,得到 2033 錯誤就是沒有消息符合你的條件。

使用 PCF 查詢隊列資料:

/**
* @return current depth of queue connected currently.
* @throws Exception
*/
public QueueInfo queryQueueInfo() throws Exception {
if (!checkStatus2(this.queueManager)) {
throw new IllegalStateException("Not Connected to queue manager.");
}

PCFMessageAgent agent = null;

try {
agent = new PCFMessageAgent(this.queueManager);

// Inquiry Queue Name & Current Depth.
int[] attrs = {
CMQC.MQCA_Q_NAME, CMQC.MQIA_CURRENT_Q_DEPTH,
CMQC.MQIA_OPEN_INPUT_COUNT, CMQC.MQIA_OPEN_OUTPUT_COUNT,
CMQC.MQIA_Q_TYPE, CMQC.MQIA_DEFINITION_TYPE, CMQC.MQIA_INHIBIT_GET,
CMQC.MQIA_INHIBIT_PUT };

PCFParameter[] parameters = {
new MQCFST(CMQC.MQCA_Q_NAME , getInputQueue().getText().trim()),
new MQCFIL(CMQCFC.MQIACF_Q_ATTRS , attrs) };

// logger.log("Querying current depth of current queue.");
MQMessage[] responses = agent.send(CMQCFC.MQCMD_INQUIRE_Q, parameters);

QueueInfo info = new QueueInfo();

for (int i = 0; i < responses.length; i++) {
MQCFH cfh = new MQCFH(responses[i]);

// Check the PCF header (MQCFH) in the response message

if (cfh.reason == 0) {
String name = "";
Integer depth = new Integer(0);

for (int j = 0; j < cfh.parameterCount; j++) { // Extract what we want from the returned attributes

PCFParameter p = PCFParameter.nextParameter(responses[i]);

switch (p.getParameter()) {
case CMQC.MQCA_Q_NAME:
name = (String) p.getValue();
info.name = name;
break;
case CMQC.MQIA_CURRENT_Q_DEPTH:
depth = (Integer) p.getValue();
info.depth = depth.intValue();
break;
case CMQC.MQIA_OPEN_INPUT_COUNT:
Integer inputCount = (Integer) p.getValue();
info.inputCount = inputCount.intValue();
break;
case CMQC.MQIA_OPEN_OUTPUT_COUNT:
Integer outputCount = (Integer) p.getValue();
info.outputCount = outputCount.intValue();
break;
case CMQC.MQIA_Q_TYPE:
info.type = ((Integer) p.getValue()).intValue();
break;
case CMQC.MQIA_DEFINITION_TYPE:
info.definitionType = ((Integer) p.getValue()).intValue();
break;
case CMQC.MQIA_INHIBIT_PUT:
info.putNotAllowed = ((Integer) p.getValue()).intValue() == 1;
break; case CMQC.MQIA_INHIBIT_GET:
info.getNotAllowed = ((Integer) p.getValue()).intValue() == 1;
default:
}
}

// System.out.println("Queue " + name + " curdepth " + depth);

return info;

} else {
System.out.println("PCF error:\n" + cfh);

// Walk through the returned parameters describing the error

for (int j = 0; j < cfh.parameterCount; j++) {
System.out.println(PCFParameter.nextParameter(responses[0]));
}

throw new Exception("PCF Error [reason :" + cfh.reason + "]");
}
}

return null;

} catch (Exception e) {
throw e;
} finally {
if (agent != null) {
try {
agent.disconnect();
} catch (Exception e) {
logger.log(e);
}
}
}

4. 到底什麼是消息隊列Java中如何實現消息隊列

「消息隊列」是在消息的傳輸過程中保存消息的容器。和我們學過的LinkedHashMap,TreeSet等一樣,都是容器。既然是容器,就有有自己的特性,就像LinkedHashMap是以鍵值對存儲。存取順序不變。而消息隊列,看到隊列就可以知道。這個容器裡面的消息是站好隊的,一般遵從先進先出原則。

java中已經為我們封裝好了很多的消息隊列。在java 1.5版本時推出的java.util.concurrent中有很多現成的隊列供我們使用。特性繁多,種類齊全。是你居家旅遊開發必備QAQ。

下面簡單列舉這個包中的消息隊列

  1. :阻塞隊列 BlockingQueue

  2. 數組阻塞隊列 ArrayBlockingQueue

  3. 延遲隊列 DelayQueue

  4. 鏈阻塞隊列 LinkedBlockingQueue

  5. 具有優先順序的阻塞隊列 PriorityBlockingQueue

  6. 同步隊列 SynchronousQueue

  7. 阻塞雙端隊列 BlockingDeque

  8. 鏈阻塞雙端隊列 LinkedBlockingDeque

    不同的隊列不同的特性決定了隊列使用的時機,感興趣的話你可以詳細了解。具體的使用方式我就不贅述了

5. mq通道和隊列的關系

Mq通道和隊列屬於輔助的關系,他們兩個需要共同建立才可以更好的作用。

(5)javamq隊列擴展閱讀

一個隊列管理器可以有多個隊列和多個通道。

隊列管理器相當於RabbitMQ中的虛擬主機。

隊列分為本地隊列,遠程隊列,傳輸隊列。

通道分為發送通道、接收通道、伺服器通道等等。

發送到本地隊列上的消息存儲在本機上。

發送到遠程隊列上的消息,通過綁定傳輸隊列傳輸到別的隊列管理器上的本地隊列上存儲。

通道為消息進出隊列的渠道橋梁,發送通道只能出,接收通道只能進,伺服器通道可以進出。

本地例子:

發送消息===>Java程序===>伺服器通道===>本地隊列===>伺服器通道===>Python程序===>收到消息

兩家公司各自伺服器AB例子:

公司A發送消息===>Java程序===>伺服器通道A===>遠程隊列A>>>>傳輸隊列A>>>>發送通道A>>>>接收通道B>>>>本地隊列B===>伺服器通道B===>Python程序===>公司B收到消息===>響應===>響應消息發送===>Python程序===>伺服器通道B===>遠程隊列B>>>>傳輸隊列B>>>>發送通道B>>>>接收隊列A>>>>本地隊列A===>伺服器通道A===>Java程序===>公司A收到響應消息

6. Java里如何查詢MQ隊列屬性

你用的是IBM MQ還是Apache的? 一般通過JAVA的JMS可以取得。
例如IBM MQ里有個MQQueue 對象

// 獲取隊列實例
MQQueue queue = qMgr.accessQueue("TEST_QUEUE", openOptions);
//獲取當前隊列最長消息的長度
queue.getMaximumMessageLength()
//獲取當前隊列最長深度

queue.getMaximumMessageLength()

7. 請問用java連接MQ時,如何獲得某一個隊列管理器下所有隊列名稱。

引起這個問題一個很有可能的原因是隊列管理器在不正常停止後,雖然ps -ef | grep mq看不到此隊列管理器的進程,但此MQ隊列管理器的進程佔用的信號燈和共享內存卻沒有被釋放掉。解決辦法如下:
1. 先查看是否有此隊列管理器殘留的 信號燈和共享內存。命令如下:
ipcs -a | grep mq
2. 如果有,使用ipcrm命令清除 殘留的信號燈和共享內存,命令如下:
ipcrm -s <semphore id>
ipcrm -m <shared memory id >
3. 再次啟動MQ隊列管理器

8. 在JAVA開發中,如何查詢MQ中的隊列句柄狀態

你用的是IBM MQ還是Apache的? 一般通過JAVA的JMS可以取得。
例如IBM MQ里有個MQQueue 對象

// 獲取隊列實例
MQQueue queue = qMgr.accessQueue("TEST_QUEUE", openOptions);
//獲取當前隊列最長消息的長度
queue.getMaximumMessageLength()
//獲取當前隊列最長深度

queue.getMaximumMessageLength()

等等功能都是提供的,具體你下載個WebSphere MQ API 找到MQQueue一看便知。

9. MQ隊列可以存放java對象嗎

可以的. 序列化之後存放到mq上面去.
但是不建議使用序列化和反序列化的方式.
最簡單的一種方式把java對象轉成json字元串,存在mq上面.

閱讀全文

與javamq隊列相關的資料

熱點內容
android開發技術文檔 瀏覽:62
32單片機寫程序 瀏覽:43
三星雙清無命令 瀏覽:835
漢壽小程序源碼 瀏覽:340
易助erp雲伺服器 瀏覽:530
修改本地賬戶管理員文件夾 瀏覽:416
python爬蟲工程師招聘 瀏覽:283
小鵬p7聽音樂哪個app好 瀏覽:354
linux下的防火牆 瀏覽:954
凌達壓縮機美芝壓縮機 瀏覽:350
php後面代碼不執行 瀏覽:236
微我手機怎樣設置應用加密 瀏覽:202
條件加密 瀏覽:628
androidstudio設置中文 瀏覽:641
汽車換壓縮機能提升製冷 瀏覽:628
安卓開發配什麼電腦 瀏覽:607
linux下php模塊 瀏覽:78
阿里雲伺服器終端在哪裡 瀏覽:148
app紙有什麼用 瀏覽:224
cuteftp命令 瀏覽:507