成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

RabbitMQ是如何收發消息的?

開發 架構
業務場景的話,咱們就用大家都很熟悉的電商業務為例,這里為了便于理解,對其做了一定的抽象和簡化。

一、前情回顧

針對那種工作年限比較長的資深的同學,可能會開始就候選人所在公司使用的消息中間件,深入里面的技術細節,比如讓你聊聊RocketMQ的架構原理和核心源碼。

但是另外一種面試風格,會先從你們的項目和業務入手進行考察,比如像下面這樣:

  • 消息中間件在你們生產項目里具體是哪個業務場景下落地的?
  • 這個業務場景有什么技術挑戰?
  • 為什么必須要在這個業務場景里用消息中間件技術?
  • 具體使用消息中間件的時候是怎么來用的?

好!這篇文章,咱們從第二種風格來聊聊。

二、業務場景介紹

我們會落地到某個具體業務系統的某個場景下,看看如何使用消息中間件,然后其效果是什么。

業務場景的話,咱們就用大家都很熟悉的電商業務為例,這里為了便于理解,對其做了一定的抽象和簡化。

大家還是來考慮一個下訂單的業務流程,比如你下個訂單,此時需要干幾件事情:

  • 更新訂單狀態為“待發貨”(耗時20ms)
  • 扣減商品庫存(耗時100ms)
  • 增加會員積分(耗時80ms)
  • 附贈優惠券(耗時50ms)
  • 倉儲調度發貨(耗時幾十秒)。

說明一下:上述環節,為了便于大家理解,做了簡化。實際真正復雜的電商系統里,整體環節和業務流程會比這個復雜很多倍,而且耗時也絕對不是上面那么簡單的。

老規矩!我們還是通過一張手繪圖,來看看這整個的業務流程:

如上圖,這個下訂單的業務流程中:

更新訂單狀態(20ms) + 扣減商品庫存(100ms) + 增加會員積分(80ms) + 附贈優惠券(50ms) = 250ms。

也就是說,僅僅是這4個流程的話,也就200多毫秒的耗時。

200多毫秒的耗時,對用戶下單體驗來說是非常快速的,幾乎就是一瞬間就完成了,不會感到過多的停頓,也就是一下子就可以看到自己下單成功了。

但是,如果加上那個調度倉儲發貨呢?

那個環節需要讀取大量的數據、使用多倉庫/多貨位的調度算法、還要跟C/S架構的倉儲系統進行網絡通信,因此我們這里假設這個環節可能會耗時數十秒。

一旦加上那個調度倉儲發貨的環節到這個下單流程里,就可能導致用戶要等頁面卡頓幾十秒后才會看到下單成功的提示,這個用戶體驗就相當的差了。

按照之前一篇文章《為什么要使用MQ消息中間件?這幾個問題必須拿下!》的說法。對于這種場景,完全適合使用消息中間件來進行異步化調用。

也就是說,訂單服務對倉儲調度發貨,僅僅是發送一個消息到MQ里,然后倉儲服務消費消息之后再慢慢的執行調度算法,然后分配商品發貨任務給對應的倉庫即可。

這樣的話,就可以把耗時幾十秒的倉儲調度發貨的環節,從下單流程里摘除出去了。進而保證下單流程就僅僅是耗時200多毫秒而已。

至于那個耗時幾十秒的倉儲調度發貨環節,我們通過異步的方式慢慢執行即可,不會影響用戶下單的體驗。

以上過程,我們同樣來一張圖,大家直觀地感受一下:

三、初步落地

好!接下來我們就假設大家在實際生產中還沒用過消息中間件,咱們從0開始,看看如何落地?

對于已經在生產中使用過消息中間件的小伙伴,不妨也看看,權當復習,溫故知新!

我們以RabbitMQ為例,假如你用的消息中間件是RabbitMQ,那么我們對這個消息中間件應該如何安裝和部署呢?

很簡單,RabbitMQ的官方文檔里提供了非常詳細的安裝部署步驟,你可以在自己的筆記本電腦本地安裝,也可以在公司的服務器上部署。

現在假設你已經參考了官方文檔并安裝完成,那么接下來在代碼層面應該怎么來引入RabbitMQ以及在系統里實現收發消息呢?

下面通過一些HelloWorld級別的代碼和一些簡單的示例圖,給大家演示一下RabbitMQ是如何收發消息的。

對于很多在實際生產中使用過MQ的同學,這些代碼可能對實際生產中使用過MQ的同學,顯得太簡單了。

不過考慮到很多初學者可能連用都沒有用過MQ,甚至是才聽說消息中間件不久,所以筆者認為這些demo代碼以及手工繪圖,還是很有必要。

好!看完了代碼,這個時候,我們可以通過一張圖來想象一下兩個服務之間的通信。

訂單服務你可以啟動多個,不同的訂單服務都可以往一個RabbitMQ的queue里推送消息。

倉儲服務你也可以啟動多個,多個倉儲服務會采用round-robin的輪詢算法,每個服務實例都可以從RabbitMQ queue里消費到一部分的消息。

上面的圖里,訂單服務在MQ專業術語中叫做“生產者”,英文是“Producer”,意思就是這個服務是專門負責生產消息投遞到MQ的。

倉儲服務在MQ專業術語中叫做“消費者”,英文是“Consumer”,意思就是這個服務專門是負責從MQ消費消息然后處理的。

這個時候,這套異步通信的架構就可以跑起來了。

好了,到目前為止,雖然這個代碼還存在不少問題,但是沒關系,大體上我們已經給一些不太熟悉MQ技術的同學,從一個比較形象易于理解簡化后的電商業務場景出發,通過HelloWorld級別的示例代碼和手工繪圖,將MQ這個技術落地跑起來了。

更進一步,各位同學完全可以參照這個文章里的案例,思考一下:自己負責的項目里,有沒有類似的業務場景可以使用MQ的?

然后想辦法在自己的項目里落地使用MQ的技術來做一下異步化,提升核心流程的性能。

這樣未來在跳槽面試的時候,才可以做到游刃有余,有自己的一套東西可以說。?

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2020-09-14 11:50:21

SpringBootRabbitMQJava

2022-08-02 11:27:25

RabbitMQ消息路由

2023-11-30 08:34:29

批量消息消息隊列

2017-07-28 09:30:55

2022-07-27 18:34:32

RabbitMQ宕機服務器

2025-03-28 10:06:01

架構輪詢延時

2020-09-27 07:44:08

RabbitMQ投遞消息

2022-08-22 08:45:57

Kafka網絡層源碼實現

2020-10-14 08:36:10

RabbitMQ消息

2024-12-18 07:43:49

2024-05-23 12:11:39

2024-05-09 08:04:23

RabbitMQ消息可靠性

2020-12-22 10:48:22

Linux網絡包網絡模型

2024-05-10 09:36:36

架構消息隊列

2023-12-04 09:23:49

分布式消息

2021-09-07 10:38:37

RabbitMQ 高可用消費

2023-11-08 07:51:11

RabbitMQ接收消息

2019-02-13 11:03:41

2023-09-20 14:35:43

2024-11-04 08:02:23

SpringRabbitMQ中間件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕在线一区二区三区 | 国产精品美女久久久久久久网站 | 视频一区二区在线观看 | 国产成人亚洲精品自产在线 | 色播久久久 | 国产伦精品一区二区三区照片91 | 天堂资源 | 国产第1页 | 日本不卡一区 | 91久久精品国产免费一区 | 操操操av | 最新日韩在线 | 亚洲视频一区二区三区 | 国产精品成人一区二区三区 | 亚洲精品视频在线观看免费 | 日韩在线播放av | 亚洲精品福利视频 | 日韩综合 | 中文字幕视频在线免费 | 国产精品欧美一区二区 | 免费视频一区二区 | 成人免费视频在线观看 | 99热成人在线 | 91福利电影在线观看 | 久久精品久久综合 | 国产精品福利久久久 | 久久久久国产 | 国产高清在线精品 | 亚洲一区成人 | 精品福利一区二区三区 | 日韩在线免费视频 | 午夜在线影院 | 久久精品亚洲精品国产欧美 | 亚洲国产成人精品女人久久久 | 日韩电影a | 91网站视频在线观看 | 99精品视频免费观看 | 成人精品国产免费网站 | 国产美女精品视频 | 中文字幕在线中文 | 日韩一区二区三区精品 |