一个实时收集MySql变更记录的组件CanalSharp.AspNetCore
一、關(guān)于CanalSharp
CanalSharp 是阿里巴巴開(kāi)源項(xiàng)目 Canal 的 .NET 客戶端。為 .NET 開(kāi)發(fā)者提供一個(gè)更友好的使用 Canal 的方式。Canal 是mysql數(shù)據(jù)庫(kù)binlog的增量訂閱&消費(fèi)組件。
CanalSharp 是 Canal 的 .NET 客戶端,它與 Canal 是采用的Socket來(lái)進(jìn)行通信的,傳輸協(xié)議是TCP,交互協(xié)議采用的是 Google Protocol Buffer 3.0。
CanalSharp的作者是園子里的曉晨和WithLin。
更多關(guān)于CanalSharp的信息請(qǐng)瀏覽:https://github.com/CanalClient/CanalSharp
更多關(guān)于Canal的信息請(qǐng)瀏覽:https://github.com/alibaba/canal
二、關(guān)于CanalSharp.AspNetCore
CanalSharp.AspNetCore是一個(gè)基于CanalSharp的適用于ASP.NET Core的一個(gè)后臺(tái)任務(wù)組件,它可以隨著ASP.NET Core實(shí)例的啟動(dòng)而啟動(dòng),目前采用輪詢的方式對(duì)Canal Server進(jìn)行監(jiān)聽(tīng)(我比較懶,目前主要是借鑒了曉晨的Demo來(lái)改寫(xiě)的),獲得MySql行更改(RowChange)后寫(xiě)入MySql指定的記錄表中(canal.logs,CanalSharp.AspNetCore會(huì)自動(dòng)幫我們創(chuàng)建這張記錄表)。當(dāng)然,這只是我目前的業(yè)務(wù)需求,完全可以改為事件訂閱+自定義輸出的方式進(jìn)行完善,這是后話了。
這個(gè)項(xiàng)目的GitHub地址為:https://github.com/XiLife-OSPC/CanalSharp.AspNetCore
三、使用前的準(zhǔn)備工作
3.1 MySql
當(dāng)前的canal開(kāi)源版本支持5.7及以下的版本,針對(duì)阿里云RDS賬號(hào)默認(rèn)已經(jīng)有binlog dump權(quán)限,不需要任何權(quán)限或者binlog設(shè)置,可以直接跳過(guò)這一步。開(kāi)啟binlog寫(xiě)入功能,并且配置binlog模式為row。
修改C:\ProgramData\MySQL\MySQL Server 5.7\my.ini的以下內(nèi)容
重啟數(shù)據(jù)庫(kù)服務(wù),測(cè)試修改是否生效
創(chuàng)建一個(gè)用戶Canal用于獲取binlog的用戶并授予權(quán)限
3.2 Canal-Server
本文通過(guò)Docker方式來(lái)啟動(dòng)Canal-Server,也可以不通過(guò)Docker方式來(lái),更多內(nèi)容可以參考Canal的github。
通過(guò)Docker拉取Canal鏡像:
通過(guò)以下命令啟動(dòng)Canal實(shí)例:
PS:其中name、destinations、defaultDatabaseName、filter根據(jù)要監(jiān)聽(tīng)的業(yè)務(wù)數(shù)據(jù)庫(kù)按需修改。
四、開(kāi)始使用CanalSharp.AspNetCore
4.1 安裝Nuget包
通過(guò)NuGet或項(xiàng)目引用添加該組件,搜索CanalSharp.AspNetCore
目前最新版本為0.0.3,支持.NET Core 2.1及以上,暫未弄成.NET Standard類庫(kù)。
4.2 添加配置文件項(xiàng)
在配置文件(appSettings.json)中添加以下配置項(xiàng):
4.3 在Startup類中注冊(cè)
在StartUp類中的Configure方法中加入以下代碼行:
五、效果演示
當(dāng)在指定要監(jiān)聽(tīng)的數(shù)據(jù)庫(kù)對(duì)某張表的某行數(shù)據(jù)進(jìn)行Update或Delete操作后,又或者進(jìn)行Insert行操作后,canal.logs表會(huì)自動(dòng)記錄變更的記錄數(shù)據(jù)如下圖:
?PS:INSERT操作會(huì)記錄新增的數(shù)據(jù)行數(shù)據(jù)到CurrentValue列,DELETE操作會(huì)記錄刪除的數(shù)據(jù)行數(shù)據(jù)到PreviousValue列,UPDATE操作則會(huì)記錄修改前PreviousValue和修改后的值CurrentValue。對(duì)于INSERT和DELETE會(huì)生成JSON格式的字符串,例如“{"Id":"12312","Name":"精裝主材","Description":"測(cè)試描述",....}”這種。
六、示例項(xiàng)目
點(diǎn)這里:CanalSharp.AspNetCore.Sample
Code有點(diǎn)亂,還沒(méi)時(shí)間做重構(gòu)和優(yōu)化,先就這樣吧。
參考資料
李志強(qiáng),《CanalSharp-mysql數(shù)據(jù)庫(kù)binlog的增量訂閱&消費(fèi)組件Canal的.NET客戶端》
CanalSharp GitHub
總結(jié)
以上是生活随笔為你收集整理的一个实时收集MySql变更记录的组件CanalSharp.AspNetCore的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 程会玩 | 在.NET Core里操作G
- 下一篇: [Abp vNext 源码分析] - 1