例如:事物 所有看到的一切都是事物,不能看到的也是事物
例如:團隊微服務,成員微服務,聚合微服務,閘道器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...