我正在使用一箇中等大小的Web應用程序,它分爲幾個微服務。目前,服務彼此溝通的方式是不可持續的混亂,所以我正在研究其他解決方案。用於內部微服務通信的Apache Kafka;在什麼級別將主題映射到事件?
看起來非常吸引我的一種方法是使用消息代理,其中每個服務都會發送和收聽消息。 Apache Kafka引起了我的注意,並且看起來像是一個非常有前途的軟件選擇。
但是,我不確定我會如何使用卡夫卡的主題,或者更具體地說,在什麼級別將事件映射到主題。我已經確定了三個主要粒度級別,如下所述。
出於演示目的,請考慮一個假設的在線商店,該商店由許多服務組成,如ShoppingCart,Billing和Shipping。
整個應用程序使用一個主題。
單個主題,例如my-app-events
,用於傳送服務發送和接收的所有事件。一個事件可能如下所示:{"from": "shopping-cart", "name": "PRODUCT_ADDED", "payload": {"product_id": 137}}
。
每個微服務使用它自己的主題。
單獨的主題,例如shopping-cart-events
,billing-events
,shipping-events
等被使用。現在shopping-cart-events
主題中的事件可能看起來像{"name": "PRODUCT_ADDED", "payload": {"product_id": 137}}
。
每個事件類型使用自己的主題。
這裏每個可能的消息都有自己的主題。我認爲將主題名稱中的事件製作者包含在內是有意義的,因此可以將主題稱爲shopping-cart.product-added
。在這種情況下,消息內容將僅僅是有效載荷,例如, {"product_id": 137}
。
我希望我能在三種方法之間做出明顯區別。你有什麼建議?您是否以這種方式成功使用過Kafka(或任何其他消息中介)?每種解決方案有哪些優勢和缺陷?
非常感謝你的洞察力@ michal! –