1.  简介

  最近在学习分布式事务及解决方案,最终找到了开源项目DotNetCore.CAP ,因为自己用的MySql数据库比较多。于是也使用MySQL+EFCore+RabbitMQ+CAP实现事务最终一致性,所有配置都已经ok,就在程序运行之后,请求接口,启动事务,调用CapPublish写入消息的时候报错了:only mysqlparameter objects may be stored,当时这个问题给我整的怀疑人生,以为是我自己哪里配置有问题。最后才发现原来是DotNetCore.CAP.MySQL引用的是MySqlConnector包,而EFCore用的是Mysql.Data包,最终导致报错,在此记录下自己的问题排查步骤。

1.  问题分析思路

  1. 第一步:检查项目配置

    说实话,当时看到这个错误,整个人就有点懵逼,第一反应是自己的配置出现了问题,认真的检查完成之后,发现整个项目配置没问题。

  2. 第二步:尝试其它代码

    然后整个人有点傻眼,就各种尝试,因为怀疑是自己事务用的有问题,尝试使用MysqlConnection来创建事务 以及 EF对象类的DataBase来开启事务。最终都得到上面的报错。

  3. 第三步:

    迫于无奈,只能去github下载源码,因为之前自己下载过CAP的源码,所以基本直接将源码拿过来研究,

      发现publish方法最终调用的是DotNetCore.CAP.MySQL里面的实现,来讲消息写入到数据库。然后就点开mysql的扩展:

  4. 调试源码:

    咋一看,没啥毛病,于是不死心,就把源码来到程序直接调试,然后还是报错,最终我点开这个MySqlParameter类,看到里面用的MySqlConnector这个包

  然后发现是这个包的问题,最终强迫症大于选择,坚持使用mysql,不想换成sqlserver,于是对项目进行换包,删除掉MySqlConnector包,换成MySql.Data,然后重新编译,执行。最终成功解决问题。

3.  解决方案

  1. 对项目:DotNetCore.CAP.MySQL源码进行修改,删除MySqlConnector包,安装MySql.Data。
  2. 解决DotNetCore.CAP.MySQL项目中的引用报错,重新编译,在调试,
  3. 完美解决

4. 推荐使用Pomelo.EntityFrameworkCore.MySql

  因为MySql.Data包的异步是假的,我特地看了下MySql.data的源码,发现其异步方法内,最终执行sql还是同步。

  MysqlConnector与Mysql.Data对比,总体性能要高出。

  推荐使用 Pomelo.EntityFrameworkCore.MySql 支持,因该包内部使用的是MySqlConnector包

  

最新文章

  1. c++文件输入输出流fstream,对输入>>和输出<<重载
  2. 【Beta版本】冲刺-Day4
  3. Eclipse导入项目:No projects are found to import
  4. python闭包小例子
  5. BZOJ3589 : 动态树
  6. linux 常用alias
  7. 各个手机APP客户端内置浏览器useragent
  8. Bootstrap简单Demo(2015年05月-18日)
  9. 在emacs里用w3m浏览网页
  10. POJ 2193 Lenny's Lucky Lotto Lists (DP)
  11. $().each 和 $.each() 两个方法的区别
  12. NeoOcean - Unity3D Ocean Waves Simulation
  13. json数据返回
  14. mongodb.open失效导致访问地址404
  15. redmine使用汇总redmine软件工程过程
  16. 简单的三层asp.net webForm使用Ninject实现Ioc
  17. (转)MultipleOutputFormat和MultipleOutputs
  18. BottomNavigationBar
  19. Recurrent Neural Network[SRU]
  20. [buaa-SE-2017]个人作业-期末总结

热门文章

  1. 驱动开发:内核CR3切换读写内存
  2. SQLyog企业版
  3. 痞子衡嵌入式:浅谈i.MXRT10xx系列MCU外接24MHz晶振的作用
  4. 一个 dubbo 和 springboot 的兼容性问题
  5. 锐捷网关交换机开启dhcp服务
  6. P7800 [COCI2015-2016#6] PAROVI 方法记录
  7. Docker | 容器数据卷详解
  8. 基于纯前端类Excel表格控件实现在线损益表应用
  9. Can not set int field xxx to java.lang.Long 错误
  10. 云计算_Apache CloudStack