[發明專利]一種基于消息中間件的客戶端自動重連方法有效
| 申請號: | 201110053661.7 | 申請日: | 2011-03-07 |
| 公開(公告)號: | CN102111419A | 公開(公告)日: | 2011-06-29 |
| 發明(設計)人: | 尹建偉;蘇勇;吳朝暉;鄧水光;李瑩;吳健 | 申請(專利權)人: | 浙江大學 |
| 主分類號: | H04L29/06 | 分類號: | H04L29/06;H04L29/08 |
| 代理公司: | 杭州裕陽專利事務所(普通合伙) 33221 | 代理人: | 江助菊 |
| 地址: | 310027 浙*** | 國省代碼: | 浙江;33 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 消息 中間件 客戶端 自動 方法 | ||
技術領域
本發明涉及一種基于消息中間件的客戶端自動重連方法,屬于計算機網絡及信息中間件技術。
背景技術
面向消息的中間件(MOM)作為一個中間層軟件,它為分布式系統中創建、發送、接收消息提供了一套可靠通用的方法,實現了分布式系統中可靠的、高效的、實時的跨平臺數據傳輸,提供了以松散耦合的靈活方式集成應用程序的一種機制。它們提供了基于存儲和轉發的應用程序之間的異步數據發送,即應用程序彼此不直接通信,而是與作為中介的消息中間件通信。它提供了有保證的消息發送,減少了開發跨平臺和網絡協議軟件的復雜性,它屏蔽了不同操作系統和網絡協議的具體細節,應用程序開發人員無需了解遠程過程調用(PRC)和網絡/通信協議的細節。?在消息中間件客戶端,主要對象有:連接工廠、連接、會話、消息生產者、消息消費者及消息。他們的主要關系是:首先由連接工廠創建連接,由連接創建會話,由會話創建消息生產者和消費者,然后由會話創建消息。所創建的消息由生產者(實現上,可以采用生產者代理)發送到目的地,消息消費者(實現上,可以采用消費者代理)從目的地接收。消息中間件提供了兩種消息服務模型:基于隊列的點對點模型(P2P模型)和基于主題的發布訂閱模型(Publish-Subscribe模型,簡稱PS模型)。
在?P2P?模型中,所有消息都被發送到特定的隊列,這些消息在隊列中保持到用盡了自己的時間限制或者由接收者處理。值得注意的是,每條消息都得到一個必須處理一次的操作,并且只處理一次。發送和接收消息與時間沒有關系,消費者必須確認對消息的接收。消費者確認了一次接收之后,相應的消息就會被從隊列中刪除。
PS消息模型是一對多的模型,即一條消息會被多個接收者接到。發布者將消息發送到主題,該主題的所有活動訂閱者將接收該消息。沒有監聽該主題的非活動訂閱者將錯過這個已發布的消息。?如果沒有監聽該主題的非活動訂閱者也想接收到它訂閱的、發布到該主題所有消息,可以使用消息持久化來實現。
消息中間件的異步傳輸消息特性,持久化消息、持續訂閱、流量控制等技術使得消息中間件穩定性、可靠性都有很大的改進。但是目前的消息中間件沒有很好的解決客戶端斷后自動重連問題。例如消息的發送者出現斷網等異常后,如何保證不少丟失消息、不重復發送消息;消息接收者出現斷網異常后,如何保證每條消息都能接收到,并且只接收到一份。
發明內容
本發明的目的在于解決消息中間件存在的客戶端斷后自動重連問題。
為實現上述目的,本發明采用如下技術方案:一種基于消息中間件的客戶端自動重連方法,包括服務器和客戶端,?所述服務器處理客戶端請求的線程包括以下步驟:
1)接收到客戶端發來請求,進行握手過程,然后接收客戶端發送過來的sessionID(會話標識符),解析sessionID,判斷是否為空,若為空,則執行步驟2),否則執行步驟3);
2)服務器自動生成一個唯一的sessionID,將sessionID發送給客戶端,執行步驟4);
3)判斷sessionID與該客戶端在服務器中保存的sessionID是否一致,若一致,執行步驟4),否則,執行步驟5);
4)接收并處理客戶端請求
5)向客戶端發送錯誤報告,關閉該客戶端連接;
所述客戶端的具體操作包括以下步驟:
1)創建socket(套接字)連接成功后,啟動socket的讀線程R和寫線程W,然后將通訊過程交給讀線程R和寫線程W;
2)置sessionID為空,讓讀線程R、寫線程W進行握手過程,若握手失敗,則關閉連接并退出,否則判斷該客戶端是消息發送者,還是接收者,如果是消息發送者,進入步驟3),否則進入步驟4);
3)寫線程W、讀線程R進行發消息過程,直到把消息發完;
4)寫線程W發送接收消息請求,然后寫線程W、讀線程R進行接收消息過程,進行接收消息過程;
5)若寫線程W捕獲到網絡異常,保存數據,設置網絡異常標識變量為真,然后定時的連接服務器,直到連接上或者連接次數超過上限。連接創建成功后,重新執行握手過程,回到斷網前的狀態;
6)若讀線程R捕獲到網絡異常,睡眠一段時間,判斷標識變量是否為真,若為真,則表示寫線程W已經捕獲到了網絡異常,將標識為設為假,回到原來狀態;否則,阻塞寫線程W,啟動一個新的寫線程W2,與讀線程R一起進行握手過程,握手成功后,殺死寫線程W2,喚醒寫線程W,回到斷網前的狀態。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于浙江大學,未經浙江大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201110053661.7/2.html,轉載請聲明來源鉆瓜專利網。





