2016-12-26 46 views
1

我正在解決微服務與消息架構之間的通信問題。如何使用消息傳遞體系結構將消息發回給發件人?

假設我有一個傳統的應用程序,並有User,PostVideo模塊。

您可以使用它創建帖子和視頻,但在此之前,我需要將用戶名轉換爲用戶ID。

enter image description here

一旦我分裂模塊微服務,我不能把它們連在一起,我們參觀微服務,而不是直接。

enter image description here

如果我想一個用戶名轉換爲ID,

我可以調用通過消息的Post服務User服務,到目前爲止,一切順利。

enter image description here

但這裏有一個問題:

  • 如何接收轉換後的用戶ID?發送另一條消息回Post服務並繼續下一步?

  • 如果我想從Video服務怎麼辦?我需要在User服務中爲它創建另一個功能?

如果我的服務越來越多,這將會是很多功能嗎?

我認爲這不是消息體系結構的工作方式,但我不知道如何在沒有消息傳遞的情況下與其他服務進行通信。

(或者我應該chain them together in the API Gateway所以我不需要消息架構?)

enter image description here

+0

我不確定是否正確理解您的問題,但是您是否考慮過使用回覆模式? HTTP:// WWW。enterpriseintegrationpatterns.com/patterns/messaging/RequestReplyJmsExample.html –

回答

1

從我的理解,你有3個服務:用戶,郵政,視頻。 在Post和Video服務中,您需要實現將用戶名作爲參數的命令,但不包括userId。由於這些服務中的所有數據都與userId相關,所以您首先考慮調用用戶服務以詢問相關的userId。

答案是:您應該在每個需要此服務的服務中保存username-userId關聯。

在您的具體情況中,郵政和視頻服務應訂閱來自用戶服務的NewUserRegistered事件並維護其自己的用戶名 - 用戶ID映射。這使您可以避免從其他服務對用戶服務的額外呼叫。

+0

如果我有1,000個用戶,我必須將它們存儲在我的每個服務中(每個服務擁有一個數據庫_),所以'1,000 * 3'(User + Post + Video ),會有很多重複的行是對的嗎? –

+1

是的,數據的非規範化和重複是分佈式系統中的常見做法。 – IlliakaillI

+1

但您不復制所有數據,只複製每個特定服務中需要的數據。在你的情況下,它只是來自用戶表 – IlliakaillI

相關問題