You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

2.2 KiB

1、有CAP学习QQ群吗?

CAP没有群。 原因是我希望培养大家独立思考和遇到问题时候的解决能力。 使用时候遇到问题先尝试看文档和独立解决,如果解决不了,可以提ISSUE或者发邮件。 QQ群有效沟通太低,浪费时间。

2、CAP要求发送者与接收者必须使用不同的数据库吗?

没有要求,要求不同的实例使用不同的数据库。不同实例的意思为,不同代码的两套程序。

但是如果你真的需要在不同的实例使用相同的数据库,那么可以参考下面3的答案。

3、CAP如何在不同的实例中使用相同的数据库?

如果想在不同的实例(程序)中连接相同的数据库,那么你可以在配置CAP的时候通过指定不同的数据库表名前缀来实现。

你可以通过以下方式来指定数据库表名前缀:

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是最终一致性的方案。

你可以想象你的场景为在调用第三方支付,假如你在进行一项第三方支付的操作,调用支付宝的接口成功后,而你自己的代码出现错误了,支付宝会回滚吗? 如果不回滚那么是又应该怎么处理呢? 这里也是同理。