在netty實現的tcp通信中,一切都是異步操做,這提升了系統性能,可是,有時候client須要同步等待消息返回,如何實現呢?筆者已經實現,在此總結下重點要素api
實現要點:緩存
一、消息結構設計服務器
消息頭中須要有id和correspondId,即消息id和響應id,使用UUID實現。message發出去的時候需設置id,服務器接收到message處理業務,響應消息中的correspondId設置成原消息的id;異步
二、採用CountDownLatch實現線程同步等待;tcp
流程示意圖:性能
一、業務系統調用統一api發送消息;線程
二、消息發送服務將消息緩存到消息管理器,緩存鍵值爲id;設計
三、消息發送服務將消息發送到服務器,同時線程進入休眠等待,還能夠設置timeout;netty
四、服務器處理消息後,將響應消息寫到tcp流;blog
五、消息接收服務接收到消息後,判斷消息correspondId是否有值,若是有值,則說明有一個線程在等待該消息返回,根據correspondId找到該線程喚醒運行,此刻服務調用即獲得返回值;
六、correspondId爲空的話,則將消息給業務系統處理。