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包

  

记开源项目:DotNetCore.CAP.MySql问题分析:only mysqlparameter objects may be stored的更多相关文章

  1. 阿里巴巴开源项目: canal 基于mysql数据库binlog的增量订阅&消费

    背景 早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求.不过早期的数据库同步业务,主要是基于trigger的方式获取增 量变更,不过从2010年开始,阿里系公司开始逐步的 ...

  2. Diycode开源项目 Glide图片加载分析

    1.使用Glide前的准备 1.1.首先要build.gradle中添加   github原地址点击我. 参考博客:Glide-开始! 参考博客:android图片加载库Glide的使用介绍. 参考博 ...

  3. dotnetcore/CAP

    CAP带你轻松玩转Asp.Net Core消息队列 CAP是什么? CAP是由我们园子里的杨晓东大神开发出来的一套分布式事务的决绝方案,是.Net Core Community中的第一个千星项目(目前 ...

  4. .NET Core微服务之开源项目CAP的初步使用

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.CAP简介 下面的文字来自CAP的Wiki文档:https://github.com/dotnetcore/CAP/wiki CAP ...

  5. Android 网络流量监听开源项目-ConnectionClass源码分析

    很多App要做到极致的话,对网络状态的监听是很有必要的,比如在网络差的时候加载质量一般的小图,缩略图,在网络好的时候,加载高清大图,脸书的android 客户端就是这么做的, 当然伟大的脸书也把这部分 ...

  6. Android开源项目xUtils HttpUtils模块分析(转)

    xUtils是github上的一个Android开源工具项目,其中HttpUtils模块是处理网络连接部分,刚好最近想整理下Android网络编程知识,今天学习下xUtils中HttpUtils. x ...

  7. TouTiao开源项目 分析笔记2

    1.Constant常量定义类 1.1.源代码 public class Constant { public static final String USER_AGENT_MOBILE = " ...

  8. Diycode开源项目 BaseApplication分析+LeakCanary第三方+CrashHandler自定义异常处理

    1.BaseApplication整个应用的开始 1.1.看一下代码 /* * Copyright 2017 GcsSloop * * Licensed under the Apache Licens ...

  9. Equinox开源项目CQRS架构分析

    CQRS架构下Equinox开源项目分析 一.DDD分层架构介绍 本篇分析CQRS架构下的Equinox开源项目.该项目在github上star占有2.4k.便决定分析Equinox项目来学习下CQR ...

  10. Android开源项目pulltorefresh分析与简单使用

    在Android开发中有时我们须要訪问网络实时刷新数据.比方QQ好友在线状态最新信息,QQ空间须要显示很多其它的好友动态信息,EOE论坛client显示很多其它的文章帖子信息等.android-pul ...

随机推荐

  1. PostgreSQL 删除数据库

    PostgreSQL 删除数据库可以用以下三种方式: 1.使用 DROP DATABASE SQL 语句来删除. 2.使用 dropdb 命令来删除. 3.使用 pgAdmin 工具. 注意:删除数据 ...

  2. Qemu/Limbo/KVM镜像 Ubuntu 22.04 精简版,可运行Windows软件,内存占用不到200M

    镜像特征: Ubuntu 22.04系统 内置Wine 7.8,可运行大量Windows 软件 高度精简,内存占用仅200M不到. 自制UI,Windows3.1风格. 完全开源 镜像说明: 用户名为 ...

  3. C#并发编程-1 并发编程概述

    一 并发编程简介 1.1 关于并发和并行 并发和并行的概念: 并发:(Concurrent),在某个时间段内,如果有多个任务执行,即有多个线程在操作时,如果系统只有一个CPU,则不能真正同时进行一个以 ...

  4. oracle中的行转列,列转行

    行转列:源表: 方法1:case when select y,sum(case when q=1 then amt end) q1,sum(case when q=2 then amt end) q2 ...

  5. Springboot 之 Filter 实现超大响应 JSON 数据压缩

    简介 项目中,请求时发送超大 json 数据外:响应时也有可能返回超大 json数据.上一篇实现了请求数据的 gzip 压缩.本篇通过 filter 实现对响应 json 数据的压缩. 先了解一下以下 ...

  6. 利用Hutool-(Java工具类)实现验证码校验

    目录 Hutool工具类介绍 Hutool实现验证码生成 测试验证码生成 其他样式的验证码 第一篇是纯利用现有JDK提供的绘图类(ImageIO)类制作,这个过程比较复杂且需要了解ImageIO类. ...

  7. 《Vue3.x+TypeScript实践指南》已出版

    转眼回长沙快2年了,图书本在去年就已经完稿,因为疫情,一直耽搁了,直到这个月才出版!疫情之下,众生皆苦!感觉每天都是吃饭.睡觉.上班.做核酸! 图书介绍 为了紧跟技术潮流,该书聚焦于当下火的Vue3和 ...

  8. 关于IOC容器

    1.什么是 IOC (1)控制反转,把对象创建和对象之间的调用过程,交给 Spring 进行管理 (2)使用 IOC 目的:为了耦合度降低

  9. 微服务架构学习与思考(11):开源 API 网关02-以 Java 为基础的 API 网关详细介绍

    微服务架构学习与思考(11):开源 API 网关02-以 Java 为基础的 API 网关详细介绍 上一篇关于网关的文章: 微服务架构学习与思考(10):微服务网关和开源 API 网关01-以 Ngi ...

  10. C语言基础--数组

    数组 概念:在内存中连续存储的具有相同数据类型的一组数据的集合. 注意: 数组中的数据类型必须都是一致的 数组在内存中必须是连续的存储空间 定义数组时候的注意事项: 定义数组的时候,[]里面的值不能是 ...