IBM WebSphere MQ消息通道的配置和維護(十)

2.5.3   通道reset命令

通道為傳送的每一條消息分配了一個序列號,它會自動累計增值,每傳送一條消息,雙方的消息序號都會自動加一。這個消息序號在通道中用SEQNUM屬性表示,在雙方連接通道的時候會約定一個起始值,以後每傳遞一條消息各自加一。通道的相關屬性SEQWRAP表示序號的最大值,預設最大值為999,999,999。序列號越界後自動歸零,從頭開始。通道利用消息序號來標識傳送和確認的消息。

通常情況下,通道雙方的消息序號計數應該是相同的。然而在某些異常情況下,會出現雙方序號不一致的情況,這通常是因為通信故障後,雙方對前面的某一條(或一批)消息是否發送成功理解不一致。在解決了不確定(In-doubt)的消息後,可以用MQSC命令通過重置消息序號將雙方調整到一致。一旦連接斷開後,通道重連時雙方MCA會將消息序號同步。如果通信異常造成序號不一致,可以在通道發送端用MQSC命令RESET CHANNEL SEQNUM手工將兩者同步。

在連接通道的主動方重置消息序號會將雙方一起調整,在被動方重置則只設置一端。

RESET CHANNEL(ChannelName) [SEQNUM(number)]

 

2.5.4   通道resolve命令

發送方和接收方的通道狀態中除了SEQNUM(通道消息序號)參數控制消息傳遞外,還有LUWID參數。LUWID指的消息批次交易號,對於每一批消息發送方都需要收到接收方的確認信息才認為消息完整無誤地送達對方,接著產生下一個LUWID並開始下一批消息傳送。如果沒有收到確認而與接收方失去聯繫,這時發送方認為這批消息為不確定(In-doubt)狀態。

大多數時候,WebSphere MQ會在通道重連時自動解決不確定狀態的問題。當然,我們也可以手工解決。事實上,通道的LUWID分成CURLUWID和LSTLUWID兩個參數屬性,具體工作過程如下:

l  發送方產生一個批次交易號,設置在CURLUWID並通知接收方

l  接收方將其設置在CURLUWID

l  發送方向接收方一條接一條地傳送整批消息

l  接收方在完整地收到消息後,將交易號設置在LSTLUWID,提交整批消息並回送確認信息

l  發送方在接收確認信息後,將交易號設置在LSTLUWID,提交整批消息

l  重複上述步驟。

所以,在發送方出現不確定狀態時,只需要比較一個發送方的CURLUWID和接收方的LSTLUWID,就可以知道該批消息在接收端是否已經提交,從而在發送方做出相應的動作即可。具體步驟如下:

1)比較雙方的LUWID

  • 對於不確定(In-doubt)狀態的發送端:

DISPLAY CHSTATUS(ChannelName) SAVED CURLUWID

  • 對於接收端:

DISPLAY CHSTATUS(ChannelName) SAVED LSTLUWID

2)如果兩者相同,說明該批消息在接收端已經完整地收到並提交。在發送端執行:

RESOLVE CHANNEL(ChannelName) ACTION(COMMIT)

3)如果兩者不同,說明該批消息在接收端未能完整地收到並提交。在發送端執行:

RESOLVE CHANNEL(ChannelName) ACTION(BACKOUT)

以下文章點擊率最高

Loading…

     

如果這文章對你有幫助,請掃左上角微信支付-支付寶,給於打賞,以助博客運營