4

對不起我的英語水平 - 如果有些事情是不明確的,請問我的意見 - 我會澄清這一點。收發郵件在微服務架構

我在微服務架構構建系統。我有一項服務包含用戶信息,一項服務提供「優惠」,一項服務提供「意見」。服務「提供」和「想法」在登錄和其他操作中與「用戶」服務交流(通過Restful API)。我想知道 - 如何處理電子郵件?每個服務都有獨立的前端,並在某些操作後發送電子郵件(例如,某些第三方打開鏈接時,某些用戶創建此優惠將獲得電子郵件,或者某些用戶創建想法時,管理員將收到電子郵件)。此外,在每個服務前臺,經理可以創建「定期」郵件,包括季節統計數據或其他信息。每個服務電子郵件看起來不同並且具有不同的內容

我有很多選擇,不知道這將是更好的。這是一些命題:

  1. 每個服務都有自己獨立的郵件系統和發送各種電子郵件 (動作之後,和定期)獨立。
  2. 「用戶服務」具有「引擎」來發送操作並定期發送電子郵件和其他服務給予任務。內部任務中有鏈接到服務誰給任務,並且該鏈接將生成電子郵件內容(例如在週期性電子郵件中統計數據)。這個解決方案很複雜...
  3. 「用戶服務」只有定期發送電子郵件的引擎(任務有鏈接生成郵件正文...),但每個微服務獨立發送動作後的電子郵件
  4. 僅創建新的微服務用於發送電子郵件(定期和「行動後」)與適當的API。 Ofcourse,如「報價」每個服務應在發送郵件的任務還鏈接(至自理) - 該鏈接將被調用時,週期性郵件將發送和該鏈接的反應會生成電子郵件的身體....

哪一個會更好?或者可能有更好的選擇?

回答

4

發送電子郵件,它就像(通過SMTP)做出的請求到另一個服務。所以,當每項服務都能夠發送電子郵件時,這是一個很好的方法。

但是,當然,發送電子郵件像渲染模板,發送代碼,配置等一些常見的邏輯。這個邏輯應該通過公共代碼(dll,包等)在服務之間共享。

因此,以這樣的方式

  1. 每個服務不依賴於其他服務時,它需要發送電子郵件
  2. 公共代碼發送電子郵件
  3. 你不服務之間共享」噸有開發,部署和網絡開銷在發送服務的這種做法

一個缺點是,每一個服務應該有相同的電子郵件合作具有專用的電子郵件的情況下,配置(SMTP地址,登錄名,密碼等)。但是,如果您共享所有服務之間的配置,這不是問題。