**1、有CAP学习QQ群吗?** CAP没有群。 原因是我希望培养大家独立思考和遇到问题时候的解决能力。 使用时候遇到问题先尝试看文档和独立解决,如果解决不了,可以提ISSUE或者发邮件。 QQ群有效沟通太低,浪费时间。 **2、CAP要求发送者与接收者必须使用不同的数据库吗?** 没有要求,要求不同的实例使用不同的数据库。不同实例的意思为,不同代码的两套程序。 但是如果你真的需要在不同的实例使用相同的数据库,那么可以参考下面3的答案。 **3、CAP如何在不同的实例中使用相同的数据库?** 如果想在不同的实例(程序)中连接相同的数据库,那么你可以在配置CAP的时候通过指定不同的数据库表名前缀来实现。 你可以通过以下方式来指定数据库表名前缀: ```cs public void ConfigureServices(IServiceCollection services) { services.AddCap(x => { x.UseKafka(""); x.UseMySql(opt => { opt.ConnectionString = "connection string"; opt.TableNamePrefix = "appone"; // 在这里配置不同的实例使用的表名前缀 }); }); } ``` 注意:相同的实例不需要指定不同的表名称前缀,他们在接收消息的时候会进行负载均衡。 **4、CAP可以不使用数据库吗? 我仅仅是想通过她来传递消息,我可以接受消息丢失的情况** 目前是不可以的。 CAP 的设计目标即为在不同的微服务或者SOA系统中来保持数据一致性的一种解决方案,保证这种数据一致性方案的前提是利用了传统数据库的 ACID 特性,如果离开了数据库,那么CAP仅仅是一个消息队列的客户端封装,这没有任何意义。 **5、使用CAP时候,业务出现错误怎么回滚?** 不能回滚,CAP是最终一致性的方案。 你可以想象你的场景为在调用第三方支付,假如你在进行一项第三方支付的操作,调用支付宝的接口成功后,而你自己的代码出现错误了,支付宝会回滚吗? 如果不回滚那么是又应该怎么处理呢? 这里也是同理。