有關WebSphere MQ消息通道管理的幾點技巧

WebSphere MQ作為IBM軟件家族的消息傳輸中間件產品,以其出色的特性和功能在業界享有盛譽。WebSphere MQ獨特的安全機制、簡便快速的編程風格、卓越不凡的穩定性、可擴展性和跨平台性,以及強大的消息通訊能力,使得它在銀行、電信,還是在交通運輸、政府機關等各行各業,贏得了很高的市場份額。在中國,WebSphere MQ同樣擁有廣泛的用戶基礎和許許多多的成功案例。它不僅具有跨平台、跨網絡的特性,而且以其特有的先進機制保證對消息的“Once and Once only”的傳輸,做到不丟失、不復傳。

  在WebSphere MQ給客戶帶來的眾多價值中,有一點十分重要,就是它的通訊感知和恢復機制,尤其適用於我國目前的現狀,在我國很多地方存在網絡線路質量差,網絡狀態不穩定的現狀。因為WebSphere MQ在支持同步通訊的同時,提供了基於消息隊列存儲轉發機制的異步通訊模式,應用程序只需將消息交給WebSphere MQ,就由WebSphere MQ負責將消息安全、可靠地發送出去,不再需要應用和人工的干預,當網絡出現故障的情況下,或對方主機發生故障時,WebSphere MQ能夠作到不需要人工干預,自動探測網絡狀況的好壞,並且在網絡恢復正常之後能夠繼續正常工作。

  而這一功能需要對操作系統的 TCP/IP參數和MQ本身有關配置參數的正確配置為前提;另一方面,在WebSphere MQ的系統配置和管理中,對通道(Channel)的管理是最複雜也是最重要的部分,本文將對如何利用TCP/IP參數配置來更好地實現通訊恢復作一討論,並對有關WebSphere MQ通道管理方面的幾個有效措施加以簡單討論。

  如何配置操作系統TCP/IP參數和MQ從而實現斷網續傳和故障恢復

  WebSphere MQ作為一個消息傳輸產品,本身是架構在TCP/IP之上的,因此與操作系統或網絡底層的TCP/IP特性有着密切的關係,很多情況下我們要藉助於修改操作系統的YCP/IP參數,來使它更好地為WebSphere MQ服務,從而更加完善地發揮WebSphere MQ的強大功能,現僅對TCP/IP參數設置的有關技巧作一簡單討論,並舉例加以說明。

  當我們要在WebSphere MQ的兩個隊列管理器之間建立通訊時,由於WebSphere MQ的通道是單向的,我們必須要建立兩條通道(Chanel),比如建立兩條類型分別為發送(sender)類型和接收(receiver)類型的通道來實現兩個WebSphere MQ Server之間的通訊,在通道的兩端WebSphere MQ利用MCA(消息通道代理)來管理和監控通道的起停等運行狀態,並對通道兩端的消息系列號(Message Sequence Number)等進行協同管理,以保證WebSphere MQ對消息的“Once and Once Only”的傳輸。對WebSphere MQ而言,在其系統配置配置文件mqs.ini文件中,在mqs.ini文件中,包含了對隊列管理器的日誌大小、通道屬性以及通過XA標準與數據庫協同工作時的有關參數的設置,除此之外,有一節用於控制有關TCP/IP特性的信息,即:

  TCP

  KeepAlive=Yes

  KeepAlive=No

  它的作用在於:當設置KeepAlive=Yes時,表示操作系統的TCP/IP參數設置對WebSphere MQ生效。

  由於WebSphere MQ接收通道的MCA處於通訊的被動方,它一直等待從發送方傳來的消息,因此它不知道什麼時候發送方會停止發送消息,也不知道當網絡出現故障時,發送方什麼時候會從工作狀態變為停止狀態。這時由於出現網絡故障,網絡連接被斷掉,發送方通道狀態會由running狀態變為retrying狀態,發送方會試圖重新建立網絡連接,而這時接收方的通道卻沒有停下來,仍處於一種假“running”的狀態,相應的我們會得到一個“Channel is in use”的錯誤信息,導致發送端想重起卻重起不了。

  出現這一現象的原因是:當發送方MCA啟動通道並長時間沒有斷開連接,這時出現網絡故障,TCP/IPsocket連接被破壞,當發送停止通道並重新啟動時,它需要建立一個新的socket連接,而接收方仍停留在原來的RECEIVE調用上,它的socket特徵與發送方新的socket特徵不一致,因此新的socket連接建立失敗。

我們可以利用TCP/IP特性來克服這一點,更好地實現斷網續傳。通常,操作系統的TCP/IP參數的缺省設置是2個小時(常見的操作系統平台如:Windows 2000/NT以及AIX,HP-UX,Sun SolarisLinux等,缺省設定均為2個小時)即發送KeepAlive探測包的時間是2小時,所以需要2個小時的時間它才會獲知網絡連接已經斷開,這對於我們來說無疑是無法接受的。

  在這種情況下,我們可以通過配置TCP/IP KeepAlive參數來提高TCP/IP的響應速度,從而實現網絡故障時WebSphere MQ能夠迅速斷開通道連接從而重新啟動通道,實現斷網續傳的強大功能。只有這樣,在發送端,MQchannel才能由running狀態變為 retrying狀態,同時,在接收端,MQchannel才能由running狀態變為not found狀態, 這樣,在網絡或主機重新恢復時,通道才能重新建立起連接,恢復running狀態。

  要實現上述功能,我們需要作以下兩方面的工作:

  1)修改WebSphere MQ系統配置文件mqs.ini,增加如下一節:

  TCP

  KeepAlive=Yes

  目的是使系統的TCP/IP設置對WebSphere MQ生效。

  2)修改操作系統的TCP/IP參數;

  在不同的系統上,修改TCP/IP參數的方法略有不同,現僅以Windows 2000/NTRISC6000HP為例作一簡單說明。

  在Windows NT平台上,
我們利用regedit來修改系統註冊表,修改HKEY_LOCAL_MACHINE\CurrentControlSet\Services\Tcpip\Parameters下的以下三個參數:

  KeepAliveInterval,設置其值為1000

  KeepAliveTime,設置其值為300000(單位為毫秒,300000代表5分鐘)

  TcpMaxDataRetransmissions,設置其值為5

  在RISC6000平台上,
no命令修改如下參數:

  tcp_keepidle保持TCP/IP連接的時間,單位為0.5秒,缺省值為14,400,即兩個小時,我們可將它設為5分鐘;

  tcp_keepinittcp連接初始timeout值,單位為0.5秒,缺省值為150,我們可將它設為50;

  tcp_keepintvl連接間隔,單位為0.5秒,缺省值為150,我們可將它設為50;

  我們也可以修改/etc/rc.net文件,

  /usr/sbin/no -o tcp_keepidle=240

  /usr/sbin/no -o tcp_keepinit=50

  /usr/sbin/no -o tcp_keepintvl=50

  注意:直接使用命令行修改,在機器重啟後,會失效;修改rc.net文件,可以做到永久生效。

  在HP平台上,

  對於HP-UNIX V10.20及其在此之前的版本,用/usr/contrib/bin nettune命令來修改有關參數;

  對於HP-UNIX V10.30及其以上版本,用/usr/bin/ndd命令來修改有關參數。

  在SUN Solaris平台上,

  用ndd -set /dev/tcptcp_keepalive_interval NNN命令來修改有關參數,tcp_keepalive_interval的單位為毫秒,缺省值為7200000毫秒,即2個小時。

  在SCO OpenServer平台上,

  tcp_keepalive tcp_keepidle 相同,其原先默認值為 7200 秒,可設為 600秒。tcp_keepintvl 其原先默認值為 75 秒,可設為15秒。均以為單位。

  運行命令 ifconfig 命令修改:

  /etc/inconfig tcp_keepidle

  /etc/inconfig tcp_keepintvl

  需要注意的一點是通道兩端的KeepAlive參數要保持協調一致,若發送端的KeepAlive值小於接收端的KeepAlive值,則當網絡出現故障時,發送端的通道停下來之後,接收端的通道會仍然停不下來。

以下文章點擊率最高

Loading…

     

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