第八節 使用RabbitMQ非同步解耦(提高效能)

2021-09-21 05:40:55 字數 1645 閱讀 5637

假設我們有乙個"更新使用者"的業務,此業務需要花費1秒鐘時間。

然後需要為當前系統"記錄日誌",日誌需要記錄使用者操作的方法名以及模組名稱,此操作需要花費3秒。

上述兩個步驟在同步情況下(主線程順序執行)需要 1+3 = 4秒。如果將"記錄日誌"的操作從"更新使用者"的業務中非同步解耦出來,即"記錄日誌"交給訊息中介軟體使用另外乙個執行緒去操作,那麼主線程僅僅需要處理"更新使用者"的操作,理論上主線程執行完畢只需要1秒鐘。

同步實現的核心**

從執**況下來看,都是同乙個執行緒,所以按照預期,系統共花費4秒中時間。

首先是搭建乙個基本的rabbitmq環境,無非就是五個步驟。

1。配置rabbitmq佇列、路由器、路由鍵  的自定義名字。

2。配置rabbitmq伺服器位址

3。建立佇列、路由器、及其它們的繫結關係

4。建立傳送端

5。建立接收端

詳細搭建可以參考本節原始碼,以及第六節 ssm框架整合rabbitmq。 

核心** 與 執行效果 **如下

總體執行效果,主線程nio-8080-exec-3共執行1秒,主線程不關心插入日誌的操作是否完成。

插入日誌系統由rabbitmq伺服器的tcontainer#0-10執行緒進行。

兩個執行緒之間互不干擾,這樣就提高了我們應用程式的效能與效率。

下面是如何使用rabbitmq伺服器進行非同步解耦的詳細過程。

controller核心**如圖,也就是說,我們構造的日誌實體交給了rabbitmq伺服器。

rabbitmq伺服器將 日誌實體傳送給路由器,路由器會把日誌實體投遞到佇列中。

將來,接收端會從佇列中取這個日誌實體資料。

接收端監聽佇列。它從佇列中獲取日誌資料。實際做"記錄日誌"業務的是rabbitmq的接收端。

閱讀更多:從頭開始學rabbimtmq目錄貼

第八節 函式

函式的特性 減少 重複 使程式變得可擴充套件 使程式變得易維護 乙個函式只做一件事情 變數作用域 python 中,程式的變數並不是在哪個位置都可以訪問的,訪問許可權決定於這個變數是在 賦值的。變數的作用域決定了在哪一部分程式可以訪問哪個特定的變數名稱。python的作用域一共有4種,分別是 以 l...

編譯原理 第八節

分為兩大類 自頂向下分析 和 自底向上分析 其中前者又細分為 遞迴下降分析法 包含回溯的遞迴下降分析法和不含回溯的遞迴下降分析法 和非遞迴的 分析法 ll分析法 後者分為算符優先分析法和lr分析法。思想 從語法的開始符號出發,試探使用不同產生式,尋找匹配於輸入符號串的推導。或者說,從對應文法開始符號...

第八節 觸發器

上節中學到了quartz 如何解析corn like 表示式,其實觸發器中最核心的地方就是處理時間,這一節讓我們來了解下quartz中的觸發器有哪些吧 我想大家一定首先想到的就是處理corn like的觸發器吧,它就是crontriggerimpl觸發器,還是看一下類圖,看看有多少觸發器,和它們之間...