微服务架构--springcloud

SpringCloud溯源——从单体架构到微服务Microservices架构 & 分布式和微服务 & 为啥要用微服务_springcloud单体项目转微服务 1.分布式系统一定是由多个节点组成的系统。其中,节点指的是计算机服务器,而且这些节点一般不是孤立的,而是互通的。2.这些连通的节点上部署了我们的节点,并且相互的操作会有协同。分布式系统对于用户而言,他们面对的就是一个服务器,提供用户需要的服务而已,而实际上这些服务是通过背后的众多服务器组成的一个分布式系统,因此分布式系统看起来像是一个超级计算机一样。 阅读详情

版本:springcloud分为springcloud netflix(停更)和springcloud alibaba两个版本

关系:springBoot可以单独使用,springCloud需要和springBoot搭配使用

搭建微服务架构

注册中心(常用的有zookeeper、eureka、consul、nacos四种,这里使用nacos)

  1.  下载nacos软件,版本需要与父工程中的版本号适用

  2. 解压后打开bin下的starterup.cmd修改配置文件为单机模式 --set MODE="standalone"

  3. 双击starterup.cmd启动即可,启动后浏览器访问localhost:8848进入页面,账号密码默认为nacos

父工程(创建一个springBoot工程修改pom文件并把src文件删除,带有注释的版本号进官网查看)

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>	<!--springBoot版本为2.3.12.RELEASE-->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/>
    </parent>
    <groupId>com.bzeh</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>	<!--父工程打包方式都为pom-->
    <name>demo</name>
    <description>demo</description>
    <modules>
        <module>vo</module>
        <module>productVo</module>
        <module>order</module>
    </modules>
    <properties>	<!--定义版本号-->
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.3.12.RELEASE</spring-boot.version>
        <spring-cloud.version>Hoxton.SR12</spring-cloud.version>	<!--springCloud版本-->
        <spring-cloud-alibaba.version>2.2.8.RELEASE</spring-cloud-alibaba.version>	<!--阿里巴巴版本-->
    </properties>
    <dependencyManagement>	<!--只负责jar包管理不负责jar下载-->
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
                    <mainClass>com.bzeh.demo.DemoApplication</mainClass>
                    <skip>true</skip>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

公共模块(实体类,vo,工具类等都可以放入该模块中)

  1. 在父工程下创建一个普通的maven工程并引入依赖
     

        <dependencies>
            <dependency>	<!--lombok依赖-->
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
            <dependency>	<!-- 引入MyBatis Plus的Spring Boot启动器,用于简化MyBatis的使用 -->
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.5.7</version>
            </dependency>
            <dependency>	<!-- 引入Spring Boot的Web启动器,用于简化Spring Web应用的配置 -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
        </dependencies>
  2. 创建实体类
     

    @Data	//lombok快速注解
    @NoArgsConstructor
    @AllArgsConstructor
    @TableName("tbl_product")	//定义数据库表名
    public class Product {
        @TableId(type= IdType.AUTO)	//定义主键且递增
        private Integer pid;
        private String pname;
        private BigDecimal price;
        private Integer stock;
    }
  3. 配置类
     

    @Configuration
    public class RestConfig {	//http协议调用,适用于spring工程
        @Bean  //把方法的返回对象交于spring容器管理
        @LoadBalanced	//启用RestTemplate的远程调用使用ribbon作为负载均衡组件
        public RestTemplate restTemplate(){
            return new RestTemplate();
        }
    }

创建微服务模块(微服务可以创建多个)  

  1. 引入依赖

     <dependencies>
            <dependency>    <!--引入父工程依赖-->
                <groupId>com.bzeh</groupId>
                <artifactId>demo</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
            <dependency>    <!-- 引入MyBatis Plus的Spring Boot启动器,用于简化MyBatis的使用 -->
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.5.7</version>
            </dependency>
            <dependency>    <!-- 引入Nacos服务发现的Spring Boot启动器,用于服务注册和发现 -->
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
            <dependency>    <!-- 引入MySQL数据库连接器,用于与MySQL数据库交互 -->
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
            <dependency>    <!-- 引入Spring Boot的Web启动器,用于简化Spring Web应用的配置 -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>    <!--引入openfeign-->
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
            </dependency>
        </dependencies>
  2. application.properties配置文件
     

    #服务器配置#
    #指定服务器端口
    server.port=8080
    #设置服务器名称
    spring.application.name=project
    ​
    #数据库配置#
    #数据库用户名
    spring.datasource.username=root
    #数据库密码
    spring.datasource.password=root
    #设置数据库连接url
    spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
    #设置数据库驱动
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    ​
    #mybatisPlus配置#
    #mybatis日志
    mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
    #指定mybatis的mapper文件位置
    mybatis-plus.mapper-locations=classpath*:mapper/*.xml
    ​
    #nacos配置#
    #设置nacos服务器地址,将该微服务地址交给nacos管理
    spring.cloud.nacos.discovery.server-addr=localhost:8848
  3. 主启动类
     

    @SpringBootApplication  //定义springBoot应用
    @MapperScan("com.job.mapper")   //扫描mapper映射文件接口
    @EnableFignClients  //开启openfeign的注解驱动
    public class ProductApp {
        public static void main(String[] args){
            SpringApplication.run(ProductApp.class,args);   //启动springBoot应用
        }
    }
  4. mapper映射文件接口
     

    public interface ProductMapper extends BaseMapper<Product> {
    }
  5. service和serviceImp业务层
     

    public interface ProductService {
        Product selectById(Integer pid);    //一个简单的查找功能
    }
    @Service    //service接口的实现类
    public class productServiceImp implements ProductService {
        @Autowired  //自动注入mapper
        private ProductMapper productMapper;
        @Override
        public Product selectById(Integer pid) {    //实现接口的查询方法
            return productMapper.selectById(pid);
        }
    }
  6. 如果使用openfeign进行远程调用的话需要创建一个openfieng接口
     

    @FeignClient(value = "nacos服务器中的服务名")
    public interface ProductFeign {
        @GetMapping("/product/getById/{pid}")   //这里的请求方式以及参数类型必须和目标方法本身一致。
        public Product getById(@PathVariable Integer pid);
    }

 ribon提供的负载均衡策略(ribbon内置多种负载均衡策略,内部负载均衡的顶级接口为com.netflix.loadbalancer.IRule)

  1. 选择最小并发请求server:BestAvailableRule

  2. 随机选择server:RandomRule

  3. 轮询方式轮询选择:RoundRobinRule

  4. 过滤失效的server和高并发的server:AvailabilityFilteringRule

  5. 根据时间分配weight:时间越长weight越小,选中的概率越低

  6. 对选定的负载均衡策略机上重试机制:RetryRule

  7. 符合判断server所在区域性能和server可用性:ZoneAvoidanceRule

ribbo使用 
第一种:局部使用(修改Application.properties配置--nacos服务器添加的服务器名.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule)
第二种:全局使用(RestConfig配置类中添加配置)
@Bean
public IRule myRule(){
    ruturn new RandomRule();
}
图解 SpringCloud 微服务架构 而SpringCloud关注全局微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,为各个微服务之间提供配置管理、服务发现、断路器、路由、事件总线、分布式系统、等等集成服务。随着访问量的增大,单体结构只能通过添加节点来应对,但发现不是所有的模块都有很大的访问量,还是以上面的电商为例子, 用户访问量的增加可能影响的只是用户和订单模块, 但是对消息模块的影响就比较小. 那么此时我们希望只多增加几个订单模块, 而不增加消息模块. 此时单体应用就做不到了, 垂直应用就应运而生了. 阅读详情

相关推荐

微服务架构-SpringCloud

什么是Ribbon是 Netflix 发布的一个负载均衡器,有助于控制 HTTP 和 TCP客户端行为。在 SpringCloud 中, nacos一般配合Ribbon进行使用,Ribbon提供了客户端负载均衡的功能,Ribbon利用从nacos中读 取到的服务信息,在调用服务节点提供的服务时,会合理(策略)的进行负载。在SpringCloud中可以将注册中心和Ribbon配合使用,Ribbon自动的从注册中心中获取服务提供者的 列表信息,并基于内置的负载均衡算法,请求服务。

As_Yua的博客 1656

SpringCloud 微服务架构详解

如果你正在学习SpringCloud或者学过微服务有点遗忘,这篇文章是不错的选择,内有丰富的图文和案例帮助你理解。

weixin_49137820的博客 1万+

SpringCloud微服务架构搭建

可以创建springboot工程,也可以使用maven工程,但spring工程里一些东西使用不到,这里使用的是springboot工程创建的父工程。客户向订单微服务发起一个下单的请求,在进行保存订单之前需要调用商品微服务查询商品的信息。在这种场景下,订单微服务就是一个服务消费者, 商品微服务就是一个服务提供者。父工程 ----jar的版本管理 公共jar的引入。在微服务架构中,最常见的场景就是。我们一般把服务的主动调用方称为。技术栈 druid。,把服务的被调用方称为。微服务之间的相互调用。

weixin_56162501的博客 2421

SpringCloud溯源——从单体架构到微服务Microservices架构 & 分布式和微服务 & 为啥要用微服务

本篇博客尝试追根溯源,阐述单体应用到分布式,微服务的演变,微服务架构的定义及优缺点,厘清相关的概念。

Arya的博客,专注后端领域 2104

数学建模 种群竞争模型 学习笔记

模型背景 应用场景 种群竞争模型 例如 s1=0.5,则表示对于供养甲的资源来讲,单位数量的乙的消耗为单位数量的甲的0.5倍,即表示乙对于该资源的占有能力是甲的0.5倍(即竞争力弱) 仿真结果及分析 (1)设置自然增长率 r1=r2=1 (2)改变自然增长率 r1=r2=0.3 (3)修改甲和乙的最大容量 n1=10000, n2=100 (4)修改甲和乙的初始数量 x1=10, x...

Test_tju的博客 2028

【漆学军】MT4进阶到MT5速成之路(2)获取持仓

MT5在持仓获取上,要比MT4复杂些,分两部分,获取持仓和挂单采用了不同的方法。 一、获取持仓中的buy和sell单 int b=0;//获取buy单个数 int s=0;//获取sell单个数 double lot_total_buy=0;//获取持仓中buy单的总手数 double lot_total_sell=0;//获取持仓中sell单的总手数 for(int i=0; i<PositionsTotal(); i++) { ulong ticket=Positi

漆学军的编程笔记 1625

【SpringCloud】微服务架构演进与Spring Cloud简介

在学习Spring Cloud 之前, 我们先来了解下什么是微服务, 以及微服务的发展史. 在架构发展的过程中, 项⽬开发遇到了哪些问题, 以及Spring Cloud是⽤来解决什么问题的.我们先看一下官网的介绍:Spring Cloud 提供了一些可以让开发人员快速构建分布式服务的工具,如配置管理、服务发现、熔断、智能路由等。它们可以在任何分布式环境中很好地工作。简单来说,Spring Cloud 就是分布式微服务架构的一站式解决方案,是微服务架构落地的多种技术的集合。

Hsusan的博客 2242

Google 人机验证(reCaptcha)无法显示解决方案

Google 人机验证无法显示解决方案第一步 安装插件Chrome/Edge 电脑版Firefox 电脑版第二步 配置插件原理参考文章 前言:为了防止机器人攻击,国外很多网站都使用了 Google reCaptcha 验证码。reCaptcha 对于国外用户非常的友好,但是… 对于国内用户就不怎么友好了。究其原因,则是国内网络全线屏蔽 Google 服务,导致 reCaptcha 完全加载不出来。这样,国内玩家就无法在对应的网站进行下一步操作了。本方案可以解决 reCaptcha 无法加载的问题。 适用

qq_40713201的博客 8万+

SpringCloud-微服务项目架构

本文是对微服务架构的详解。微服务架构是一种灵活而强大的设计模式,通过将系统拆分为独立的、自治的服务,使得应用更容易维护、扩展和升级。然而,采用微服务架构也需要在设计和管理上付出更多的努力,平衡其优势和挑战,以确保系统的稳定性和可维护性。

踏雨歌青春,诗酒趁年华 1万+

Win10蓝屏代码critical process died的解决方法

critical process died”蓝屏错误是Win10操作系统中较为常见的问题之一。当遇到这一问题时,可以尝试通过修复当前系统、检查硬盘槽位或重新安装系统等方法来解决。本文详细介绍了这三种方法的操作步骤和注意事项,希望能帮助大家摆脱这一困扰。同时,也建议大家在日常使用中注意系统的维护和更新,以减少类似问题的发生。

mmoo_python的博客 9535

Windows 11 系统部署 OpenClaw 完整指南:从零到一的 AI 助手搭建

OpenClaw(昵称“小龙虾”)是一款开源 AI 代理工具,定位为“AI 指挥官”,能够接收指令、调用工具并自动化处理任务。它支持对接国内外多款大模型,所有数据本地存储,兼顾实用性与安全性。本文将详细介绍在 Windows 11 系统上部署 OpenClaw 的完整流程。OpenClaw 在 Windows 11 上的部署虽然有一定技术门槛,但按照本文的步骤操作,大多数用户都能顺利完成安装。环境准备是基础:确保 Node.js ≥22 版本,使用管理员权限操作安装方式灵活选择。

weixin_41484939的博客 800

SpringCloud微服务架构

feign:client:config:default:# 设置日志记录级别,其取值共有none、basic、headers、full@Bean全局有效具体服务有效需求:定义全局过滤器,拦截请求,判断请求的参数是否满足下面条件:参数中是否有authorization,authorization参数值是否为admin如果同时满足则放行,否则拦截实现:import org。

zyy030616的博客 7718

ardupilot 方向余弦矩阵/旋转矩阵的理解

本节主要记录自己对ardupilot中用到的方向余弦矩阵/旋转矩阵的理解,欢迎批评指正,有些资料参考网上写的比较好的资料,免得查找资料麻烦。旋转矩阵的坐标理解:表示从旋转矩阵的下标的坐标系的坐标变换到上标表示的坐标系坐标下。旋转矩阵的坐标系理解:表示从旋转矩阵的上标的坐标系变换到下标表示的坐标系下。从旋转矩阵的投影更好理解,比如下面旋转矩阵的第一行是左边坐标系的第一维分量在右边坐标系的投影。

陌城烟雨 612

springcloud微服务架构进阶pdf_微服务架构 & Spring Cloud

编者按 有了前面Spring、SpringBoot的学习基础之后,再接触Spring Cloud分布式的架构时能够比较快速地理解一些概念。以下整理一些学习笔记,以备日后回顾。欢迎指正。(一)微服务架构[1]将传统web开发方式与微服务架构放在一起比较,会对这两个概念有更好的理解。注释中链接地址的博客文章,非常通俗易懂地解释了微服务框架,记录下来分享。传统web开发方式采用单体式,将所有功能全部打...

weixin_39586915的博客 506

EMC原理-传导(共模、差模)与辐射(近场、远场)详解

本文深入介绍了电磁兼容(EMC)的基本概念,包括EMI和EMS,以及如何处理传导干扰(共模、差模)和辐射干扰(近场、远场)。详细讨论了近场感应、远场辐射的原理,滤波器和屏蔽技术在抑制噪声信号中的作用。此外,探讨了差模和共模干扰的来源、影响及滤除方法,如使用差模电感、电容和共模线圈。最后,提到了穿心电容在滤除高频噪声中的应用。

让你爱上电路设计 3551

Android系统内存和性能关系的调研

摘要:本文分析了低内存导致性能问题的判断方法和评估思路。通过监控/proc/vmstat中的allocstall_normal、pageoutrun等指标可判断内存回收频率,当MemFree、MemAvailable和Cached均低于500MB时可能出现明显卡顿。全文通过实验和理论验证分析,回答因内存瓶颈导致性能问题的一些分析和解决的思路。

jidapenglin28的专栏 130

SpringCloud微服务架构开发——01微服务架构与SpringCloud

认识架构 1.单体架构 一个典型的单体应用就是将所有业务场景的表示层、业务逻辑层和数据访问层放在一个工程中,最终经过编译、打包,部署在一台服务器上。以一个进存销系统的单体应用为例,架构如下图所示。 单体架构的缺点: 单体应用中,随着业务越来越复杂,应用需要增加的功能越来越多,单体应用的代码量越来越大,代码可读性、可维护性和扩展性会下降。同时,单体应用带来的隐患会比较多,由于系统的庞大以及关联较多,应用中的任何一个Bug都有可能导致整个系统宕机。 2.SOA架构 SOA架构是一个面向服务的架.

weixin_43624810的博客 1915

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

微服务架构 SpringCloud

将项目所有模块(功能)打成jar或者war,然后部署一个进程--医院挂号系统;

m0_72713521的博客 2251

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

初步了解SpringCloud微服务架构

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

分享思想,留下痕迹。 1596

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【微服务架构】springcloud微服务架构搭建

要会用,首先要了解。图懒得画,借鉴网上大牛的图吧,springcloud组件架构如图: 微服务架构的应用场景: 1、系统拆分,多个子系统 2、每个子系统可部署多个应用,应用之间负载均衡实现 3、需要一个服务注册中心,所有的服务都在注册中心注册,负载均衡也是通过在注册中心注册的服务来使用一定策略来实现。 4、所有的客户端都通过同一个网关地址访问后台的服务,通过路由配置,网关来判

Davidworld 1万+

Spring Cloud 的微服务架构

Spring Cloud 的微服务架构 前言 Spring Cloud 微服务总体架构图 名词理解: Sleuth-链路跟踪: 为服务之间调用提供链路追踪。通过Sleuth可以很清楚的了解到一个服务请求经过了哪些服务,每个服务处理花费了多长。从而让我们可以很方便的理清各微服务间的调用关系。 断路器(Hystrix): 在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调...

姜皓的博客 876

微服务:浅谈SpringCloud微服务架构

微服务:简述Spring Cloud微服务架构 Spring Cloud作为当下主流的微服务框架,可以让我们更简单快捷地实现微服务架构。Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。Spri...

王小二(海阔天空) 3980

【学习笔记】SpringCloud微服务架构

文章目录@[toc]SpringCloud微服务架构一、认识微服务1. 服务架构的演变1.1 单体架构1.2 分布式架构1.3 服务治理1.4 微服务1.5 总结2. 微服务技术对比2.1 微服务架构2.2 微服务技术对比2.3 企业需求3. SpringCloud二、微服务拆分案例1. 服务拆分1.1 服务拆分注意事项2. 服务间调用2.1 步骤2.2 提供者和消费者三、eureka注册中心1. 远程调用问题2. eureka原理2.1 Eureka作用2.2 总结3. 搭建EurekaServer3.1

BlackBox_的博客 3032

介绍6款热门的SpringCloud微服务开源项目,总有适合你的!

Cloud-Platform是国内首个基于Spring Cloud微服务化开发平台,具有统一授权、认证后台管理系统,其中包含具备用户管理、资源权限管理、网关API 管理等多个模块,支持多业务系统并行开发,可以作为后端服务的开发脚手架。代码简洁,架构清晰,适合学习和直接项目中使用。

pingguocu3的博客 949
上一篇: springsecurity+vue脚手架+redis完成前后端分离登录退出和权限检测的代码--后端
下一篇: springsecurity+vue脚手架+redis完成前后端分离登录退出和权限检测的代码--前端
Baizeh
博客等级 码龄2年 415粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值