企业建站域名,涞水县建设局网站,班级网页模板html源码,中文编程做网站一、关于CanalSharpCanalSharp 是阿里巴巴开源项目 Canal 的 .NET 客户端。为 .NET 开发者提供一个更友好的使用 Canal 的方式。Canal 是mysql数据库binlog的增量订阅消费组件。CanalSharp 是 Canal 的 .NET 客户端#xff0c;它与 Canal 是采用的Socket来进行通信的消费组件。 CanalSharp 是 Canal 的 .NET 客户端它与 Canal 是采用的Socket来进行通信的传输协议是TCP交互协议采用的是 Google Protocol Buffer 3.0。 CanalSharp的作者是园子里的晓晨和WithLin。 更多关于CanalSharp的信息请浏览https://github.com/CanalClient/CanalSharp 更多关于Canal的信息请浏览https://github.com/alibaba/canal二、关于CanalSharp.AspNetCore CanalSharp.AspNetCore是一个基于CanalSharp的适用于ASP.NET Core的一个后台任务组件它可以随着ASP.NET Core实例的启动而启动目前采用轮询的方式对Canal Server进行监听我比较懒目前主要是借鉴了晓晨的Demo来改写的获得MySql行更改RowChange后写入MySql指定的记录表中canal.logsCanalSharp.AspNetCore会自动帮我们创建这张记录表)。当然这只是我目前的业务需求完全可以改为事件订阅自定义输出的方式进行完善这是后话了。 这个项目的GitHub地址为https://github.com/XiLife-OSPC/CanalSharp.AspNetCore三、使用前的准备工作3.1 MySql 当前的canal开源版本支持5.7及以下的版本针对阿里云RDS账号默认已经有binlog dump权限不需要任何权限或者binlog设置可以直接跳过这一步。开启binlog写入功能并且配置binlog模式为row。 修改C:\ProgramData\MySQL\MySQL Server 5.7\my.ini的以下内容log-binmysql-binbinlog-formatRowserver-id1 重启数据库服务测试修改是否生效show variables like binlog_format;show variables like log_bin; 创建一个用户Canal用于获取binlog的用户并授予权限CREATE USER canal IDENTIFIED BY canal;GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO canal %;FLUSH PRIVILEGES;3.2 Canal-Server 本文通过Docker方式来启动Canal-Server也可以不通过Docker方式来更多内容可以参考Canal的github。 通过Docker拉取Canal镜像docker pull canal/canal-server:v1.1.2 通过以下命令启动Canal实例docker run --restartalways --name core_productservice_canal \-e canal.instance.master.address192.168.16.150:3306 \-e canal.instance.dbUsernamecanal \-e canal.instance.dbPasswordcanal \-e canal.destinationsproducts \-e canal.instance.defaultDatabaseNameproducts_dev \-e canal.instance.filter.regexproducts_dev\\..* \-e canal.instance.filter.black.regexproducts_dev\\.canal.* \-p 8001:11111 \-d canal/canal-server:v1.1.2PS其中name、destinations、defaultDatabaseName、filter根据要监听的业务数据库按需修改。四、开始使用CanalSharp.AspNetCore4.1 安装Nuget包 通过NuGet或项目引用添加该组件搜索CanalSharp.AspNetCore 目前最新版本为0.0.3支持.NET Core 2.1及以上暂未弄成.NET Standard类库。4.2 添加配置文件项 在配置文件appSettings.json)中添加以下配置项Canal: { Enabled: true, LogSource: Core.Product.Canal, ServerIP: 192.168.16.190, // Canal-Server所在的服务器IP ServerPort: 8001, // Canal-Server所在的服务器Port Destination: products, // 建议与Canal-Server中配置的destination保持一致 Filter: products_dev\\..*, // 建议与Canal-Server中配置的filter保持一致 SleepTime: 50, // SleepTime越短监听频率越高但也越耗CPU BufferSize: 2048, // 每次监听获取的数据量大小单位为字节 Output: { ConnStr: Server192.168.16.150;Port3306;Databaseproducts_dev;Uiddev;Pwdxdp // 要输出的日志记录表所在的数据连接字符串 } }4.3 在Startup类中注册 在StartUp类中的Configure方法中加入以下代码行public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApplicationLifetime appLifetime, ILoggerICanalClientHandler defaultLogger){ ...... app.RegisterCanalSharpClient(appLifetime, Configuration, defaultLogger);}五、效果演示 当在指定要监听的数据库对某张表的某行数据进行Update或Delete操作后又或者进行Insert行操作后canal.logs表会自动记录变更的记录数据如下图 PSINSERT操作会记录新增的数据行数据到CurrentValue列DELETE操作会记录删除的数据行数据到PreviousValue列UPDATE操作则会记录修改前PreviousValue和修改后的值CurrentValue。对于INSERT和DELETE会生成JSON格式的字符串例如“{Id:12312,Name:精装主材,Description:测试描述,....}”这种。六、示例项目点这里CanalSharp.AspNetCore.SampleCode有点乱还没时间做重构和优化先就这样吧。参考资料李志强《CanalSharp-mysql数据库binlog的增量订阅消费组件Canal的.NET客户端》CanalSharp GitHub