一種消息傳輸的方法和消息中間件的制作方法
【技術領域】
[0001]本發明涉及網絡通信技術,特別涉及一種消息傳輸的方法和消息中間件。
【背景技術】
[0002]在通信系統中,需要在各方之間收發消息,以完成特定的應用功能。目前,常用的消息傳輸的方法包括:發送方調用相應的應用程序,并使用相應的網絡傳輸協議,將需要發送的消息發送給接收方;接收方調用相應的應用程序,并使用相應的網絡傳輸協議接收消息。
[0003]可見,采用目前常用的消息傳輸的方法,應用開發者為了傳輸消息,必須要學會如何用網絡和操作系統軟件的功能,編寫相應的應用程序來發送和接收信息,且交換信息沒有標準方法,不同的應用必須進行特定的編程從而和多平臺、不同環境下的一個或多個應用通信。例如,為了實現網絡上不同主機系統間的通信,將要求具備在網絡上如何交換信息的知識(比如用TCP/IP的socket程序設計);為了實現同一主機內不同進程之間的通訊,將要求具備操作系統的消息隊列或命名管道(Pipes)等知識。因此,實現難度較大。
【發明內容】
[0004]本發明提供一種消息傳輸的方法和消息中間件,能夠降低實現難度。
[0005]本發明實施例的一個方面提供了一種消息傳輸的方法,應用于消息中間件中,設置消息發送隊列和消息接收隊列,還包括:
[0006]接收消息發送方的第一調用請求;
[0007]根據第一調用請求,接收消息發送方發來的各消息,將該各消息存入消息發送隊列;
[0008]逐一取出消息發送隊列中當前的消息,并向消息接收隊列發送當前取出的第一消息;
[0009]將消息發送隊列中取出并發送的第一消息,保存到消息接收隊列;
[0010]接收消息接收方的第二調用請求;
[0011 ] 根據第二調用請求,將消息接收隊列中的消息傳輸給消息接收方。
[0012]所述向消息接收隊列發送包括當前取出的第一消息包括:
[0013]啟動第一事務,在第一事務下執行:向消息接收隊列發送當前取出的第一消息,并等待對應第一消息的反饋碼,如果在超時之前未接收到反饋碼,或者如果在超時之前接收到反饋碼且反饋碼表示接收錯誤時,則觸發回滾事務,返回執行第一事務下的處理;如果在超時之前接收到反饋碼且反饋碼表示接收正確時,則觸發提交事務,返回執行下一次取出消息發送隊列中當前的消息的處理;
[0014]和/ 或,
[0015]所述將消息發送隊列中取出并發送的第一消息保存到消息接收隊列包括:
[0016]接收消息發送隊列中當前取出并發來的第一消息,判斷接收到的當前消息是否為預期收到的第一消息,如果不是,則返回表示接收錯誤的反饋碼,如果是,則啟動第二事務,在第二事務下執行:將收到的第一消息保存到消息接收隊列中,判斷消息是否保存成功,如果是,則觸發提交事務,如果不是,則觸發回滾事務,返回執行第二事務下的處理。
[0017]在所述從消息發送隊列中取出當前的消息之后,并在所述向消息接收隊列發送當前取出的第一消息之前,進一步包括:在所述第一消息中攜帶消息頭,該消息頭包括第一消息在消息發送隊列中的ID號;該ID號是第一消息在消息發送隊列中的排序號;
[0018]所述判斷接收到的當前消息是否為預期收到的第一消息包括:從當前消息中解析出消息頭,根據解析出的消息頭中的ID號和上一個接收到的消息中消息頭攜帶的ID號,判斷當前消息是否為上一個接收到的消息的相鄰下一個消息,如果不是,則確定當前消息不是所述預期收到的第一消息;如果是,確定當前消息為預期收到的第一消息。
[0019]所述消息頭中進一步包括第一消息的校驗碼;
[0020]在判斷出當前消息為上一個接收到的消息的相鄰下一個消息之后,并在確定當前消息為預期收到的第一消息之前,進一步包括:
[0021]判斷當前計算出的校驗碼與解析出的消息頭中的校驗碼是否相同,如果相同,則確定當前消息為預期收到的第一消息,如果不相同,則確定當前消息不是預期收到的第一消息。
[0022]—種消息中間件,包括:消息發送服務單元、消息發送隊列、消息接收服務單元以及消息接收隊列,其中
[0023]消息發送服務單元,用于接收消息發送方發來的第一調用請求;根據第一調用請求,接收消息發送方發來的各消息,將該各消息存入消息發送隊列;以及,逐一取出消息發送隊列中當前的消息,發送當前取出的第一消息;
[0024]消息接收服務單元,用于接收所述消息發送服務單元當前發送的第一消息,保存到消息接收隊列;以及接收消息接收方的第二調用請求;根據第二調用請求,將消息接收隊列中的消息逐一取出傳輸給消息接收方。
[0025]所述消息發送服務單元在執行所述向消息接收隊列發送當前取出的第一消息的處理時,具體執行:啟動第一事務,在第一事務下執行:向消息接收服務單元發送當前取出的第一消息,并等待對應第一消息的反饋碼,如果在超時之前未接收到反饋碼,或者如果在超時之前接收到反饋碼且反饋碼表示接收錯誤時,則觸發回滾事務,返回執行第一事務下的處理;如果在超時之前接收到反饋碼且反饋碼表示接收正確時,則觸發提交事務。
[0026]所述消息接收服務單元在執行所述接收所述消息發送服務單元當前發送的第一消息,保存到消息接收隊列時,具體執行:
[0027]所述消息接收服務單元接收所述消息發送服務單元發來的當前消息,判斷接收到的當前消息是否為預期收到的第一消息,如果不是,則返回表示接收錯誤的反饋碼,如果是,則啟動第二事務,在第二事務下執行:將收到的第一消息保存到消息接收隊列中,判斷消息是否保存成功,如果是,則觸發提交事務,如果不是,則觸發回滾事務,返回執行第二事務下的處理。
[0028]所述消息發送服務單元,進一步在從消息發送隊列中取出第一消息之后,并在向消息接收服務單元發送第一消息之前,在所述第一消息中攜帶消息頭,該消息頭包括第一消息在消息發送隊列中的ID號;該ID號是第一消息在消息發送隊列中的排序號;
[0029]所述消息接收服務單元,在判斷接收到的當前消息是否為預期收到的第一消息時,具體執行:所述消息接收服務單元從當前消息中解析出消息頭,根據解析出的消息頭中的ID號和上一個接收到的消息中消息頭攜帶的ID號,判斷當前消息是否為上一個接收到的消息的相鄰下一個消息,如果不是,則確定當前消息不是所述預期收到的第一消息;如果是,則確定當前消息是預期收到的第一消息。
[0030]所述消息發送服務單元,進一步在所述消息頭中攜帶第一消息的校驗碼;
[0031]所述消息接收服務單元,進一步在判斷出當前消息為上一個接收到的消息的相鄰下一個消息之后,并在確定當前消息為預期收到的第一消息之前,判斷當前計算出的校驗碼與解析出的消息頭中的校驗碼是否相同,如果相同,則執行所述確定當前消息為預期收到的第一消息,如果不相同,則確定當前消息不是預期收到的第一消息。
[0032]所述消息發送服務單元用于向消息發送方提供putMq API接口,利用該putMq API接口接收消息發送方發來的第一調用請求;
[0033]所述消息接收服務單元用于向消息發送方提供getMq API接口,利用該getMq API接口接收消息接收方發來的第二調用請求。
[0034]可見,本發明實施例提供的消息傳輸的方法和消息中間件,能夠基于消息發送隊列和消息接收隊列兩個隊列來完成消息的傳輸,也就是說,在消息發送方側,無需編寫相應的發送消息用的應用程序,只需要調用消息中間件,將消息保存到消息發送隊列中即可,而在消息接收方側,無需編寫相應的接收消息用的應用程序,只需要調用消息中間件,將消息保存到消息接收隊列中即可,因此,無需使用者掌握復雜的應用程序編寫,比如,無需掌握在網絡上如何交換信息的知識(比如用TCP/IP的socket程序設計),也無需掌握操作系統的消息隊列或命名管道等知識。因此,降低了實現難度。
【附圖說明】
[003