记开源项目:DotNetCore.CAP.MySql问题分析:only mysqlparameter objects may be stored
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. 解决方案
- 对项目:DotNetCore.CAP.MySQL源码进行修改,删除MySqlConnector包,安装MySql.Data。
- 解决DotNetCore.CAP.MySQL项目中的引用报错,重新编译,在调试,
- 完美解决
4. 推荐使用Pomelo.EntityFrameworkCore.MySql
因为MySql.Data包的异步是假的,我特地看了下MySql.data的源码,发现其异步方法内,最终执行sql还是同步。
MysqlConnector与Mysql.Data对比,总体性能要高出。
推荐使用 Pomelo.EntityFrameworkCore.MySql 支持,因该包内部使用的是MySqlConnector包
记开源项目:DotNetCore.CAP.MySql问题分析:only mysqlparameter objects may be stored的更多相关文章
- 阿里巴巴开源项目: canal 基于mysql数据库binlog的增量订阅&消费
背景 早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求.不过早期的数据库同步业务,主要是基于trigger的方式获取增 量变更,不过从2010年开始,阿里系公司开始逐步的 ...
- Diycode开源项目 Glide图片加载分析
1.使用Glide前的准备 1.1.首先要build.gradle中添加 github原地址点击我. 参考博客:Glide-开始! 参考博客:android图片加载库Glide的使用介绍. 参考博 ...
- dotnetcore/CAP
CAP带你轻松玩转Asp.Net Core消息队列 CAP是什么? CAP是由我们园子里的杨晓东大神开发出来的一套分布式事务的决绝方案,是.Net Core Community中的第一个千星项目(目前 ...
- .NET Core微服务之开源项目CAP的初步使用
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.CAP简介 下面的文字来自CAP的Wiki文档:https://github.com/dotnetcore/CAP/wiki CAP ...
- Android 网络流量监听开源项目-ConnectionClass源码分析
很多App要做到极致的话,对网络状态的监听是很有必要的,比如在网络差的时候加载质量一般的小图,缩略图,在网络好的时候,加载高清大图,脸书的android 客户端就是这么做的, 当然伟大的脸书也把这部分 ...
- Android开源项目xUtils HttpUtils模块分析(转)
xUtils是github上的一个Android开源工具项目,其中HttpUtils模块是处理网络连接部分,刚好最近想整理下Android网络编程知识,今天学习下xUtils中HttpUtils. x ...
- TouTiao开源项目 分析笔记2
1.Constant常量定义类 1.1.源代码 public class Constant { public static final String USER_AGENT_MOBILE = " ...
- Diycode开源项目 BaseApplication分析+LeakCanary第三方+CrashHandler自定义异常处理
1.BaseApplication整个应用的开始 1.1.看一下代码 /* * Copyright 2017 GcsSloop * * Licensed under the Apache Licens ...
- Equinox开源项目CQRS架构分析
CQRS架构下Equinox开源项目分析 一.DDD分层架构介绍 本篇分析CQRS架构下的Equinox开源项目.该项目在github上star占有2.4k.便决定分析Equinox项目来学习下CQR ...
- Android开源项目pulltorefresh分析与简单使用
在Android开发中有时我们须要訪问网络实时刷新数据.比方QQ好友在线状态最新信息,QQ空间须要显示很多其它的好友动态信息,EOE论坛client显示很多其它的文章帖子信息等.android-pul ...
随机推荐
- 举例:Network Policies
本文描述了如何在 Kubernetes 集群中通过创建 NetworkPolicy 的方式来声明网络策略,以管理 Pod 之间的网络通信流量. 前提条件 创建一个Deployment并配置Servic ...
- 对vue中的data进行数据初始化
this.$data:是表示当前的改变后的this中的数据 this.$options.data():是表示没有赋值前的this中的数据,表示 初始化的data 一般可以使用Object.assign ...
- Javascript 手写 LRU 算法
LRU 是 Least Recently Used 的缩写,即最近最少使用.作为一种经典的缓存策略,它的基本思想是长期不被使用的数据,在未来被用到的几率也不大,所以当新的数据进来时我们可以优先把这些数 ...
- k8s 中 Pod 的控制器
k8s 中 Pod 的控制器 前言 Replication Controller ReplicaSet Deployment 更新 Deployment 回滚 deployment StatefulS ...
- 洛谷P1120 小木棍 (搜索+剪枝)
搜索的经典题. 我们要求木根的最小长度,就要是木根的数量尽可能多,可以发现木根的长度一定可以整除所有小木棒的总长度,从小到大枚举这个可能的长度,第一次有解的就是答案. 关心的状态:当前正在拼哪根木棍, ...
- 7.MongoDB系列之聚合框架
1. 管道阶段和可调参数 聚合框架基于管道的概念.他由多个阶段组成,每个阶段都会提供一组按钮或可调参数.每个阶段对其输入执行不同的数据处理任务,并生成文档已作为输出传递到下一阶段. 2. 阶段常见操作 ...
- 【算法训练营day7】LeetCode454. 四数相加II LeetCode383. 赎金信 LeetCode15. 三数之和 LeetCode18. 四数之和
[算法训练营day7]LeetCode454. 四数相加II LeetCode383. 赎金信 LeetCode15. 三数之和 LeetCode18. 四数之和 LeetCode454. 四数相加I ...
- 如何使用IDEA创建一个简单的java工程?
文章目录 1.创建新工程 1.1 新建项目 1.2 在src目录下创建package 1.3 在包下创建类 2.编写代码.运行项目 2.1 编写代码 2.2 运行结果 3.开心的从eclipse转移到 ...
- wpf 手指触摸图片放大缩小 设置放大缩小值
xaml代码: <Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/w ...
- 沁恒CH32V003F4P6 开发板上手报告和Win10环境配置
CH32V003 沁恒最近推出的低价CH32V003系列, 基于青稞RISC-V2A内核, 48MHz主频, 2KB SRAM, 16KB Flash, 工作电压兼容3.3V和5V. 主要参数如下 S ...