2017-04-09 15 views
0

我有一個用於響應應該發生在Sync中的客戶端的API調用。但是在api執行過程中,系統A需要發佈一個kafka消息給不同的系統B,而系統B則返回它所使用的系統A的響應,並且應該以API響應的形式響應客戶端。在同一個執行中處理同步API調用(REST/Spring)和異步消息(Kafka)

所以,這裏的問題有Async pub-sub模型和Sync API處理。我可以將生產者和消費者的pub-sub作爲兩個不同的@Async方法來處理,但是在同步執行中發現兩者之間的關聯存在問題。

通過API產生的主線程可以等待消費者獲得響應,但這變成了阻塞線程。

關於實施這個高度讚賞的任何建議。

感謝

回答

0

你沒說的同步和異步的部分都寫在什麼編程語言,但一般而言,您應該使用在EIP的書在這裏 http://www.enterpriseintegrationpatterns.com/patterns/conversation/RequestResponse.html

所描述的異步請求響應模式正在處理同步API的應用程序(例如通過HTTP進行的REST API調用)將發佈到請求主題,包括請求消息中的唯一CorrelationID(在應用程序中生成),然後在另一端,您的Async應用程序可以處理來自請求主題的這些請求,並使用CorrelationID作爲密鑰回覆響應主題和/或將其包括在響應中nse消息(因此原始請求者知道哪個響應與哪個請求相關)。

+0

Hans,感謝您的回覆。編程是用Java編寫的,我在我的問題上標記了它。 在同一個Sync呼叫中關聯請求和響應是這裏的挑戰。我可以阻止線程,但那不是一個可擴展的選項。 – Rams

+0

你不應該阻塞線程。你需要它來輪詢卡夫卡的回覆。 –

+0

我的意思是,在得到Kafka的響應之後,在相同的上下文中關聯請求和響應,而不阻塞原始請求線程是挑戰。 – Rams