MySQL¶
MySQL 是一个开源的关系型数据库,你可以使用 MySQL 来作为 CAP 消息的持久化。
配置¶
要使用 MySQL 存储,你需要从 NuGet 安装以下扩展包:
Install-Package DotNetCore.CAP.MySql
然后,你可以在 Startup.cs 的 ConfigureServices 方法中添加基于内存的配置项。
public void ConfigureServices(IServiceCollection services) { // ... services.AddCap(x => { x.UseMySql(opt=>{ //MySqlOptions }); // x.UseXXX ... }); }
配置项¶
| NAME | DESCRIPTION | TYPE | DEFAULT |
|---|---|---|---|
| TableNamePrefix | Cap表名前缀 | string | cap |
| ConnectionString | 数据库连接字符串 | string | null |
自定义表名称¶
你可以通过重写 IStorageInitializer 接口获取表名称的方法来做到这一点
示例代码:
public class MyTableInitializer : MySqlStorageInitializer { public override string GetPublishedTableName() { //你的 发送消息表 名称 } public override string GetReceivedTableName() { //你的 接收消息表 名称 } }
services.AddSingleton<IStorageInitializer, MyTableInitializer>();
使用事务发布消息¶
ADO.NET¶
private readonly ICapPublisher _capBus; using (var connection = new MySqlConnection(AppDbContext.ConnectionString)) { using (var transaction = connection.BeginTransaction(_capBus, autoCommit: false)) { //your business code connection.Execute("insert into test(name) values('test')", transaction: (IDbTransaction)transaction.DbTransaction); _capBus.Publish("sample.rabbitmq.mysql", DateTime.Now); transaction.Commit(); } }
EntityFramework¶
private readonly ICapPublisher _capBus; using (var trans = dbContext.Database.BeginTransaction(_capBus, autoCommit: false)) { dbContext.Persons.Add(new Person() { Name = "ef.transaction" }); _capBus.Publish("sample.rabbitmq.mysql", DateTime.Now); dbContext.SaveChanges(); trans.Commit(); }