使用netty實現的tcp通訊中如何實現同步返回


在netty實現的tcp通訊中,一切都是異步操作,這提高了系統性能,但是,有時候client需要同步等待消息返回,如何實現呢?筆者已經實現,在此總結下重點要素

實現要點:

1、消息結構設計

     消息頭中需要有id和correspondId,即消息id和響應id,使用UUID實現。message發出去的時候需設置id,服務器接收到message處理業務,響應消息中的correspondId設置成原消息的id;

2、采用CountDownLatch實現線程同步等待;

流程示意圖:

1、業務系統調用統一api發送消息;

2、消息發送服務將消息緩存到消息管理器,緩存鍵值為id;

3、消息發送服務將消息發送到服務器,同時線程進入休眠等待,還可以設置timeout;

4、服務器處理消息后,將響應消息寫到tcp流;

5、消息接收服務接收到消息后,判斷消息correspondId是否有值,如果有值,則說明有一個線程在等待該消息返回,根據correspondId找到該線程喚醒運行,此刻服務調用即得到返回值;

6、correspondId為空的話,則將消息給業務系統處理。

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM