精華 2023年10月1日 微服務 事件匯流排

2021-10-24 09:49:40 字數 3899 閱讀 4181

例如:事物 所有看到的一切都是事物,不能看到的也是事物

例如:團隊微服務,成員微服務,聚合微服務,閘道器api,認證中心等等包括類,物件

所有的事件都是事物變化的結果

大家接觸事件最早就是在js 或者是c#高階特性。大家對於事件不預設,但是對於事件不是很好理解

事件就是指事物狀態的變化,每一次事物變化的結果都稱作為事件

就是用來管理所有的事件的一種機制就稱作為事件匯流排

包括事件發布,事件儲存,事件訂閱,事件處理的統稱

作用:事件匯流排是一種機制,它允許不同的元件彼此通訊而不彼此了解。 元件可以將事件傳送到eventbus,而無需知道是誰來接聽或有多少其他人來接聽。 元件也可以偵聽eventbus上的事件,而無需知道誰傳送了事件。 這樣,元件可以相互通訊而無需相互依賴。 同樣,很容易替換乙個元件。 只要新元件了解正在傳送和接收的事件,其他元件就永遠不會知道.

將微服務系統各元件之間進行解耦

使用業務的發展來說

capmasstransit

事件 : 就是一些狀態資訊

發布者:發布事件的角色 cap

訂閱者:訂閱消費事件的角色 cap

訊息傳輸器:傳輸事件

訊息儲存器:儲存事件

azure

rabbitmq

kafaka

in memory queue

sql server

mysql

postgresql

mongodb

inmemorystorage

dashboard

條件1、微服務系統

2、rabbitmq

3、sqlserver

4、cap

步驟1、微服務系統準備

​ 微服務系統全部準備完畢

2、rabbitmq準備

​ 2.1 環境準備

​ 2.2 rabbitmq 啟動

​ 1、在安裝目錄下新增視覺化外掛程式

rabbitmq-plugins enable rabbitmq_management
​ 2、在安裝目錄下啟動

rabbitmq-server
​ 3、檢視rabbitmq狀態

rabbitmqctl status
​ 4、在瀏覽器輸入

​ 訪問rabbitmq後台系統

3、sqlserver準備

​ sqlserver啟動,安裝

4、cap準備

​ 4.1 cap環境

​ 4.2 cpa配置

​ 1、在ruanmou.microservice.core專案中新增依賴

cap nuget dotnetcore.cap

cap傳輸器nuget dotnetcore.cap.rabbitmq

cap持久化dotnetcore.cap.sqlserver

​ 2、在ruanmou.microservice.aggregateservice服務中startup.cs中新增

// 8、新增事件匯流排cap

services.addcap(x => );

});

​ 3、在ruanmou.microservice.videoservice服務startup.cs中新增

// 8、新增事件匯流排cap

services.addcap(x => );

});

​ 3.1 在videocontroller.cs 中方法上新增特性[capsubscribe]

///

///

///

[nonaction]

[capsubscribe("tontcap")]

public actionresultpostvideo(video video)

, video);

} ​ 4、效果展示​

步驟1、將rabbitmq直接關閉

事件訊息無法傳送,儲存到記憶體快取中

2、當將rabbitmq啟動後,訊息正常傳送

​ 內部使用定時器輪詢機制實現

aggregateservice 執行業務成功,傳送訊息前宕機

使用本地訊息表解決(思想:持久化操作)

條件1、本地訊息表

步驟1、在ruanmou.microservice.aggregateservice服務中

​ 1.1 建立context檔案,然後在context資料夾內建立aggregatecontext

/// /// aggregate服務上下文

///

public class aggregatecontext : dbcontext

}

}

​ 1.3 在startup.cs中新增訊息持久化

// 9、註冊上下文到ioc容器

services.adddbcontext(options =>

);// 8、新增事件匯流排cap

services.addcap(x => );

});

​ 1.4測試演示效果

​ 資料庫中多了兩張表

​ 當業務執行成功,傳送訊息時,聚合微服務宕機,訊息被持久化到資料庫

​ 當重啟聚合微服務時,訊息傳送成功,被成功消費

​ 1.5 原理

​ 1、定時器 訊息重試

​ 2、冪等性 乙個函式每次都是相同的結果,狀態只有乙個

videoservice接受訊息失敗

當videoservice直接宕機的時候接受訊息失敗,

然後重啟videoservice訊息消費成功

videoservice接受訊息成功執行失敗

條件1、本地訊息表

步驟1、在ruanmou.microservice.core專案中

​ 1.1 安裝sqlserver

nuget dotnetcore.cap.sqlserver
2、在ruanmou.microservice.videoservice專案中

​ 2.1 在startup.cs中新增訊息持久化

// 8、新增事件匯流排cap

services.addcap(x => );

});

​ 2.2 效果展示

​ 資料庫多了兩張表

​ 2.3 原理

​ 1、定時器 訊息重試

​ 2、冪等性 乙個函式每次都是相同的結果,狀態只有乙個

使用人工干預實現

條件1、dashboard – 後台管理頁面

步驟1、在ruanmou.microservice.core專案中

​ 1.1 安裝dashboard

nuget dotnetcore.cap.dashboard
2、在ruanmou.microservice.videoservice專案中

​ 2.1 在startup.cs中新增dashboard

// 8、新增事件匯流排cap

services.addcap(x => );

// 8.4新增cap後台監控頁面

x.usedashboard();

});

​ 2.2 執行開啟cap後台監控頁面

​ 對於傳送失敗的訊息進行重**送

​ 對於消費失敗的訊息進行重複消費

精華 2023年10月2日 微服務 日誌中心

舉例說明,在做的各位有沒有在讀小學的,都是讀過小寫的,我們讀小學的時候,經常做乙個事情,老師要求我們寫日記,我們感覺非常煩,那麼,日記記錄的是什麼,是我們每一天做的事情。專業表述,日記是不是用來記錄人每一天活動的狀態,同理,在軟體中,為了記錄軟體的執行狀態,那麼記錄這種狀態的叫做日誌 日記是用來記錄...

精華 2023年8月17日 WebApi許可權認證

session webapi預設是不支援session restful 可以自行擴充套件去支援 無狀態 第2次請求和第1次請求不關聯 1 登陸過程,拿到令牌 token ticket 許可證 2 驗證成功 賬號 密碼 其他資訊 時間 加密一下得到ticket 返回給客戶端 3 請求時,ajax裡面帶...

精華 2023年01月02日 WPF繫結

在winform中,我們常常會用到各種型別的賦值,例如 類似這種賦值操作,我們之所以不稱之為繫結,主要原因是因為他們大多數操作都是一次性的,無論是資料還是按鈕本身發生變化,對兩者而言都是不可見的。而繫結的概念則側重於 兩者的關聯,協議與兩者之間的影響。首先,從乙個簡單的例子來理解什麼是繫結。1 bi...