Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

.NET Conf 2018 - Message Queue Based RPC

1,022 views

Published on

不論是微服務架構,或是分散式系統,服務之間的可靠通訊永遠是最重要的架構議題。如果通訊的方式是同步 (synchronized) 的,通常都用 HTTP + REST,如果通訊方式要求要非同步模式 (async) 的話,通常都會使用訊息貯列 (message queue),同時附帶極高的可靠度 (即使後端掛掉都不用擔心的高可靠度),以及能夠有效的均衡後端的附載。

不過,如果我期望能同時有高可靠度,均衡的附載能力,同時還要有如同 RPC (Remote Procedure Call) 的同步模式,該如何才能辦到? 這個 Session 我就會告訴大家,如何透過 Message Queue 達成可靠的跨服務通訊 RPC。

由於這個議題高度涉及實作細節,因此這個 Session 我選定的實作環境為 .NET Standard 2.0, Message Queue 我採用 RabbitMQ, 整個 Session 會分成幾個部分進行:

1. Message Queue 的架構與應用方式介紹
2. Message Queue + RPC 的架構設計
3. 實作需要注意的環節,包含多執行緒、優雅的中止 Worker (Graceful Shutdown)、以及如何有效率的使用 RabbitMQ (connection, channel, consumer 之間的關係)

這些都是我實際運用的經驗分享,如果你期待能成為經驗豐富的架構師,那你絕對不能錯過這個議程!

難度: 300

Published in: Software
  • Be the first to comment

.NET Conf 2018 - Message Queue Based RPC

  1. 1. www.dotnetconf.net
  2. 2. • • • • • • https://twitter.com/hughcards/status/423952995240648704
  3. 3. Message Queue Basic
  4. 4. https://tw.saowen.com/a/63c04f9638e1f962669b04d6acc6b6eae697b42978b338384 c0a8626bf3de617
  5. 5. http://www.rabbitmq.com/getstarted.html
  6. 6. Design (Architecture)
  7. 7. 如果我需要等待 queue 處理結果, 才能進行下一步? RPC (over queue) & Async Call?
  8. 8. http://www.rabbitmq.com/tutorials/tutorial-six-dotnet.html Queue RPC 基本運作原理: 送出的 Message 標註 Correlation ID 與 Reply Queue 告知 回傳的管道。實作上的挑戰在於非同步的處理,以及 C / S 都要扮演 Consumer 的角色 (對不同的 Queue)。
  9. 9. Implementation & Demo ( .NET Standard 2.0 )
  10. 10. Main 呼叫 Client.CallAsync( ) 要執行完成這段 code 才會 回傳 async Task. CallAsync( ) Task 回傳後, await 必須等到這段結束才會 拿到 Result
  11. 11. https://columns.chicken-house.net/2007/12/17/threadpool- %E5%AF%A6%E4%BD%9C-3-autoresetevent-manualresetevent/
  12. 12. https://columns.chicken-house.net/2018/05/10/tips-handle-shutdown
  13. 13. References
  14. 14. https://www.cloudamqp.com/blog/2018-01-19-part4-rabbitmq-13-common-errors.html
  15. 15. 3. Don’t share channels between threads 6. Don't have an unlimited prefetch value
  16. 16. http://www.rabbitmq.com/tutorials/tutorial-six- dotnet.html
  17. 17. https://dzone.com/articles/rabbitmq-request- response
  18. 18. https://www.rabbitmq.com/direct-reply-to.html
  19. 19. https://www.rabbitmq.com/releases/rabbitmq-dotnet-client/v3.4.2/rabbitmq-dotnet-client-3.4.2-client-htmldoc/html/nam https://github.com/rabbitmq/rabbitmq-dotnet-client/tree/master/projects/client/RabbitMQ.Client/src/client/messagepat
  20. 20. 【我們正在招募】 ● 架構師 ● C# Asp.Net MVC開發工程師 https://www.91app.com/careers/
  21. 21. fb.com/Study4.twfb.com/groups/216312591822635 Study4.TW

×