# springcloudalibaba_asa **Repository Path**: asakitty/springcloudalibaba_asa ## Basic Information - **Project Name**: springcloudalibaba_asa - **Description**: springcloud 阿里巴巴2020版,这个很新了 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 4 - **Created**: 2020-03-09 - **Last Updated**: 2022-05-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 2020年特别的地方 1,Eureka没有了,要么用Zookeeper+dubbo;要么用Consul;推荐用阿里巴巴的Nacos Consul的下载安装很简单的 springcloud已经封装好了这些连接,只需要配置yml,pom即可 Eureka强调的是AP 高可用和分区容错 Consul和Zookeeper强调的是CP 强一致和分区容错 2,服务调用Ribbon也在逐渐被LoadBalancer取代 LoadBalancer虽然是新东西,并在推动 但Ribbon的被替代还很难 Nginx,LVS,硬件f5什么的也能做,不过那些事进程外的 Ribbon是进程内的 默认是轮询 wightedresponsetimerule 权重 bestavailablerule 先过滤掉出问题的 availabilityfilteringrule 先过滤掉故障 zoneavoidancerule 复合 3,服务调用Feign没有了,用OpenFeign 4,服务降级Hystrix也没有了,其实很多人在用,但官方不推荐用了,用Resilience4j,但国内主要是Springcloud Alibaba Sentinel来做 Hystrix用起来还行 注意的:JMeter 用来做压力测试 里面主要两个方案,服务降级好服务熔断 服务器端设置fallback 客户端设置fallback 5,服务网关,Zuul没有了,推荐的Zuul2这个东西没有了,估计出不来了,用gateway 没有写zuul的例子,可以参考十次方,我感觉zuul还蛮好用的,但其底层的基础架构是BIO的,而不是牛逼的NIO 6,服务的配置Config没有了(其实是不错的),用Nacos 7,服务总线Bus没有了,用Nacos 8*cloud stream 这个是对mq消息中间键的封装使用 之前的东西都没了,不再维护的,跳票的,真惨 9*Sleuth的zipkin一个链路追踪的jar,可以直接运行 服务注册和配置中心 Nacos startup.cmd http://localhost:8848/nacos 账号和密码都是 nacos 熔断与限流 https://github.com/alibaba/Sentinel/releases Sentinel java -jar sentinel-dashboard-1.7.1.jar 默认的账号和密码都是 sentinel **注册的信息服务器刷不出来,要调用一下接口才行,懒加载机制 sentinel的降级和限流配置,这个很繁琐,需要使用的时候去看细节 sentinel +ribbon +fein 还挺好 Sentinel的持久化 这个依赖nacos,看样子应该是不需要的,但这个还算比较好 *****Seata 分布式事务 TC 事务协调者 TM 事务管理器 RM 资源管理器 seata 实例的一个启动 1,修改配置文件 file.conf 自定义分组 vgroup_mapping.my_test_tx_group = "default" 改为 vgroup_mapping.my_test_tx_group = "fsp_tx_group" 修改存储方式,由文件的,改为数据库的 mode = "file" 改为 mode = "db" 连接的数据库改为自己的 url = "jdbc:mysql://127.0.0.1:3306/seata" user = "mysql" password = "mysql" 改为 url = "jdbc:mysql://127.0.0.1:3306/seata" user = "root" password = "root" 2,创建数据库 seata 并利用db_store.sql这个文件来建表 3,修改registry.conf文件 这个服务注册进nacos type = "file" 改为 type = "nacos" nacos { serverAddr = "localhost" namespace = "" cluster = "default" } 改为 nacos { serverAddr = "localhost:8848" namespace = "" cluster = "default" } 4,seata-server.bat对服务器进行启动 5,上面的步骤就已经启动好了 这里的具体的业务是,完成 下订单--减库存--扣余额--改订单状态 具体的业务,我们要创建三个库: 订单服务: create database seata_order; 建表t_order CREATE TABLE `t_order`( `id` BIGINT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, `user_id` BIGINT(11) DEFAULT NULL COMMENT '用户id', `product_id` BIGINT(11) DEFAULT NULL COMMENT '产品id', `count` INT(11) DEFAULT NULL COMMENT '数量', `money` DECIMAL(11,0) DEFAULT NULL COMMENT '金额', `status` INT(1) DEFAULT NULL COMMENT '订单状态 0 创建中 1已完结' ) ENGINE = INNODB AUTO_INCREMENT = 7 DEFAULT CHARSET=utf8; 库存服务: create database seata_storage; 建表t_storage CREATE TABLE `t_starage`( `id` BIGINT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, `product_id` BIGINT(11) DEFAULT NULL COMMENT '产品id', `total` INT(11) DEFAULT NULL COMMENT '总库存', `used` INT(11) DEFAULT NULL COMMENT '已用库存', `residue` INT(11) DEFAULT NULL COMMENT '剩余库存' ) ENGINE = INNODB AUTO_INCREMENT = 2 DEFAULT CHARSET=utf8; INSERT INTO seata_storage.t_starage(id,product_id,total,used,residue) VALUES (1,1,100,0,100); 账户服务: create database seata_account; 建表t_account CREATE TABLE `t_account`( `id` BIGINT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, `user_id` BIGINT(11) DEFAULT NULL COMMENT '用户id', `total` DECIMAL(11,0) DEFAULT NULL COMMENT '总额度', `used` DECIMAL(11,0) DEFAULT NULL COMMENT '已用额度', `residue` DECIMAL(11,0) DEFAULT NULL COMMENT '剩余可用额度' ) ENGINE = INNODB AUTO_INCREMENT = 2 DEFAULT CHARSET=utf8; INSERT INTO seata_account.t_account(id,user_id,total,used,residue) VALUES (1,1,1000,0,1000); 在每个数据库下建立回滚日志表,这个语句在db_undo_log.sql文件里面 DROP TABLE `undo_log`; CREATE TABLE `undo_log` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT, `branch_id` BIGINT(20) NOT NULL, `xid` VARCHAR(100) NOT NULL, `context` VARCHAR(128) NOT NULL, `rollback_info` LONGBLOB NOT NULL, `log_status` INT(11) NOT NULL, `log_created` DATETIME NOT NULL, `log_modified` DATETIME NOT NULL, `ext` VARCHAR(100) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`) ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 在使用seata的时候,代码中只需要添加@GlobalTransactional这个标签,配置文件里面配置一下 关于seata这里例子里面的版本是0.9,实际使用中推荐用更高的版本,因为这东西比较新,更新比较快,0.9不支持集群。。。 要支持集群有更高版本,有集群版本,不过集群版本是要付费的 https://nacos.io/ ***nacos的Linux 并基于Mysql 集群安装: 要求数据库5.6.5以上 实际生产中用mysql主从备机,这个方案也很好 Nacos默认自带的是嵌入式数据库,我们要讲derby切换到mysql: ①conf目录下找到sql脚本(nacos-mysql.sql),去数据库执行它 ②conf目录下找到application.properties配置文件 添加官网文档上的要求的配置,配置信息的具体内容根据自己的情况 spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=nacos_devtest db.password=youdontknow 搭建的集群具体有:1个Nginx+3个nacos注册中心+1个mysql 下载Linux版的Nacos 解压: tar -zxvf nacos-server-1.1.4.tar.gz cp -r nacos /mynacos/ 运行集群: ①修改cluster.conf的配置 cluster.conf这个配置文件添加 # ip:port 200.8.9.16:8848 200.8.9.17:8848 200.8.9.18:8848 ②修改startup的脚本 注意了,这个文件的修改,是为了自定义服务器启动的端口号 ":m:f:s:" 改为 ":m:f:s:p:" 这个if下新增一行 P) PORT=$OPTARG;; 最后 nohup $JAVA ${JAVA_OPT} nacos.nacos ... 改为 nohup $JAVA-Dserver.port=${PORT} ${JAVA_OPT} nacos.nacos ... ③修改nginx的配置文件 vim nginx.conf 添加 upstream cluster{ server 127.0.0.1:3333 server 127.0.0.1:4444 server 127.0.0.1:5555 } server 的listen 值改为1111 location / { proxy_pass http://cluster } ④启动 每个服务器 ./startup.sh -p 3333 ./startup.sh -p 4444 ./startup.sh -p 5555