例如,一旦用戶到達我們工作流中的付款步驟,需要調用許多不同的服務(例如付款,電子郵件生成,內容生成)。前端是否應該或應該設計一個服務來處理這種類型的請求?如果是這樣,該服務應該如何設計,以便它可以處理複合請求,而不用特別硬編碼這些請求的組成部分?在微服務體系結構中,您如何處理必須進行次要數據處理和調用其他服務的複合請求?
回答
您正在尋找的東西沿線BPEL來抽象您的業務邏輯。除非您明確需要將此外部化,否則我強烈建議您不要。測試更加困難,並且增加了服務的複雜性。
這就是說,你可能想要將你的其他服務與外觀包裝起來,這樣你就可以與呼叫細節隔離了。這允許您的邏輯是可測試的,並允許這些服務實現獨立於應用程序的其餘部分進行更改。
這真的取決於你指的是什麼。
複合UI
在用戶界面中,你應該建立一個複合的UI。 (微)服務應該負責垂直層面,而不是水平層面。例如,業務層或數據層應該被金融,銷售等垂直行業所取代,在這些行業中,您可以構建更小的組件。這些組件在技術上負責從存儲到用戶界面的業務問題。我主要使用AngularJS這樣的框架,其中一部分UI需要一些數據,各種服務可以添加到數據中。例如亞馬遜推薦的書籍列表。您從映射到單個產品ID的url開始。您從ServiceA獲取書籍信息,ServiceB的價格,ServiceC的運輸成本,ServiceD的折扣等。還有一些推薦書籍的列表。該列表包含來自ServiceB的多個產品ID(例如),並且這些產品會再次向ServiceA發送多個請求以獲取圖書信息,如名稱&圖像網址。
現在發票可以是相同的,也可以是電子郵件。創建它就好像它是一個複合UI。
集成
當你想要檢索的數據能夠傳送到外部系統,例如,沒有用戶界面。它不屬於財務或銷售或任何其他。例如,創建一個新的邊界,如果您願意,則稱爲IT/Ops。例如,它的責任是與第三方整合。它擁有這個問題。
然後它可以定義幾個接口,如IProvideBookInformation
和IProvideBookPrice
。 IProvideBookInformation
可以有一個像BookInfo ProvideBook(Guid id)
這樣的方法,其中BookInfo
是DTO,它也屬於此IT/Ops服務。
然後Sales
和Finance
負責實現這個接口。所以他們依賴於這個接口。然後以任何你喜歡的方式部署,例如在.NET世界中你可以使用NuGet。然後,在部署此IT/Ops服務時,您還可以部署來自實現這些接口的其他服務的組件。這就像Composite UI示例,其中一個網站部署了多個其他組件,爲用戶界面提供數據。但現在它是後端集成服務,而不是具有用戶界面的東西。 IT/Ops服務對實施沒有直接的依賴關係。但是當它需要實現服務時,它會加載它可以找到的所有組件,並搜索其所需接口的實現。一旦找到實現,它就會執行它並獲取數據。組件可能直接進入數據庫,這很簡單,我們都很喜歡簡單。但它也可能通過某些REST API或任何您最喜歡的方式請求數據。它以這種方式收集所有數據,通過它所擁有的接口,但是由其他服務提供的實現。一旦收集完所有數據後,它會向第三方發出呼叫,並執行任何應有的操作。
我認爲微服務必須使用隊列來與其他人進行通信。
前端可以生成調用,但後端必須保存一個操作發生後需要通知隊列的邏輯。
我認爲RabbitMq是這些類型的設計的一個很好的工具。例如:在結帳
- 用戶通階段1
- 發送 - 用戶標識,電子郵件到emailqueue_standby隊列
- 發送 - 用戶ID,項emailcontent_standby隊列
- 發送 - 用戶標識,paymentdata到paymentchecking隊列
- 用戶在結帳時完成第2階段
- 消耗味精從emailqueue_standby隊列 - >激活發送電子郵件
- 消耗味精從paymentchecking Queue代碼 - >激活代碼檢查付款數據 - >發表回覆approve_payment_data - >值USER_ID,DEAL_ID
- 消耗從approve_payment_data味精隊列 - >如果用戶支付被批准繼續,否則回到停止階段1
所以這個流程可以讓您一次更新多級無碼阻塞,也允許分配之間的負載後端服務器。
- 1. 在服務中處理傳入請求的體系結構
- 2. 服務結構服務遠程處理
- 3. 在調用其他Web服務時處理服務器故障
- 4. 在微服務架構中處理用戶界面數據?
- 5. 微服務順序數據處理
- 6. 處理微服務架構中的Web服務的API網關
- 7. 春季啓動微處理服務 - 從影響其他微服務
- 8. GraphQL和微服務體系結構
- 9. 轉發ServiceStack請求到其他服務處理器
- 10. NodeJS中的微服務體系結構
- 11. 處理N層體系結構事務
- 12. 如何在處理N層體系結構時管理事務?
- 13. 在處理Flask請求的服務器上運行Celery任務
- 14. 服務器無法處理請求
- 15. System.Web.Services.Protocols.SoapException:服務器無法處理請求
- 16. Javascript服務器請求處理
- 17. 服務器端Java處理Ajax請求
- 18. 從服務器jQuery ajax處理請求
- 19. 服務器端處理請求
- 20. 小服務程序請求處理
- 21. Pymodbus RTU服務器 - 處理請求
- 22. 如何構建Tornado異步Web服務以便一次處理單個請求(Singleton請求服務器)
- 23. 調用一個函數,每次和AJAX請求被處理,並從服務器
- 24. 用Gunicorn服務器處理Django中的多個進程請求
- 25. 如何處理REST Web服務中的數十萬個請求?
- 26. 處理微服務請求的設計模式
- 27. 服務器無法處理請求。在Web服務方法調用
- 28. 處理每分鐘100請求微服務
- 29. 處理CoreLocation服務回覆
- 30. 使用其他微服務進行其他調用