SpringCloud Alibaba第一节

本文介绍了系统架构的发展历程,从单体应用到微服务,重点讲解了SpringCloudAlibaba如何提供一站式微服务解决方案。通过创建父工程、基础模块、商品服务模块和订单服务模块,展示了如何搭建并测试一个简单的微服务应用。涉及到的技术包括Mybatis-plus、SpringBoot、RESTful以及服务间的调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、SpringCloud Alibaba简单介绍

从互联网早起到现在,系统架构大体经历了下面几个过程: 单体应用架构—>垂直应用架构—>分布式架构—>SOA架构—>微服务架构,当然还有悄然兴起的Service Mesh(服务网格化)。

  • 单体应用架构

    优点:
    项目架构简单,小型项目的话,开发成本低。
    项目部署在一个节点上,维护方便
    缺点:
    全部功能集成在一个工程中,对于大型项目来讲不易开发和维护[修改代码]。
    项目模块之间紧密耦合,单点容错率低。
    无法针对不同模块进行针对性优化和水平扩展
    
  • 垂直应用架构

    优点:
    系统拆分实现了流量分担,解决了并发问题,可以针对不同模块进行优化和水平扩展 
    一个系统的问题不会影响到其他系统,提高容错率
    缺点:
    系统之间相互独立, 无法进行相互调用
    系统之间相互独立, 会有重复的开发任务
    
  • 分布式架构

    优点:
    抽取公共的功能为服务层,提高代码复用性
    缺点:
    系统间耦合度变高,调用关系错综复杂,难以维护
    
  • SOA架构----阿里dubbo

    优点:
    使用注册中心解决了服务间调用关系的自动调节 
    缺点: 
    服务间会有依赖关系,一旦某个环节出错会影响较大( 服务雪崩 ) 
    服务关心复杂,运维、测试部署困难
    
  • 微服务架构

    优点: 
    服务原子化拆分,独立打包、部署和升级,保证每个微服务清晰的任务划分,利于扩展 
    微服务之间采用Restful等轻量级http协议相互调用 
    缺点:   小型项目----微服务架构不合适。仓库系统---微服务。
    微服务系统开发的技术成本高《高》(容错、分布式事务等)
    

Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。
依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统

二、案例

案例准备:

maven:3.5.0+
数据库:MySQL 5.7 以上
持久层: Mybatis-plus
其他: SpringCloud Alibaba

创建父工程

创建一个maven工程,然后在pom.xml文件中引入依赖

 <!--打包方式: jar: java工程   war:web工程  pom:父工程-->
    <packaging>pom</packaging>

    <!--继承springboot的父工程-->
    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.3.2.RELEASE</version>
    </parent>
    <!--定义版本号-->
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF- 8</project.reporting.outputEncoding>
        <spring-cloud.version>Hoxton.SR8</spring-cloud.version>
        <spring-cloud-alibaba.version>2.2.5.RELEASE</spring-cloud-alibaba.version>
    </properties>
    <!--dependencyManagement:它只负责jar的管理  不负责jar的下载,如果想下载需要再子工程中引入依赖来下载。
    -->
    <dependencyManagement>
        <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>

版本对应:
在这里插入图片描述

创建基础模块

创建 shop-common 模块,在pom.xml中添加依赖

<!--加入依赖-->
    <dependencies>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.72</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>

添加实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "shop_product")
public class Product {
    @TableId(type= IdType.AUTO)
    private Integer pid;
    private String pname;//商品名称
    private Double pprice;//商品价格
    private Integer stock;//库存
}
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "shop_order")
public class Order {
    @TableId(type = IdType.AUTO)
    private Long oid; //订单id
    private Integer uid;//用户id
    private String username;//用户名
    private Long pid;//商品id
    private String pname;//商品名称
    private Double pprice;//商品价格
    private Integer number;//购买数量

}

创建 shop-product 模块

1 创建一个名为 shop_product 的模块,并添加springboot依赖

 <dependencies>
        <dependency>
            <groupId>com.xxx</groupId>
            <artifactId>shop-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

2 创建工程的主启动类

@SpringBootApplication
public class ProductApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProductApplication.class,args);
    }
}

3 创建配置文件application.yml

在这里插入图片描述

4 创建ProductMapper接口
在这里插入图片描述
注意:在主启动类添加包扫描
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KBP5FEly-1625574321496)(C:\Users\86187\Desktop\微信截图\微信截图_20210706193645.png)]
5 创建ProductService接口

public interface ProductService {

    public Product findById(Long productId);
}

6 创建ProductServiceImpl实现类

@Service
public class ProductImplement implements ProductService{
    @Resource
    private ProductMapper productMapper;
    @Override
    public Product findById(Long productId) {
        Product product = productMapper.selectById(productId);
        return product;
    }
}

7 创建ProductController类

@RestController
@RequestMapping("product")
public class ProductController {
    @Autowired
    private ProductService productService;

    @GetMapping("findById/{pid}")
    public Product findById(@PathVariable Long pid){
        return productService.findById(pid);
    }
}

8 启动工程测试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aX3F3GNn-1625574321497)(C:\Users\86187\Desktop\微信截图\微信截图_20210706194938.png)]

创建 shop-order 模块

1 创建一个名为 shop_order 的模块,并添加springboot依赖

 <dependencies>
        <dependency>
            <groupId>com.xxx</groupId>
            <artifactId>shop-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

2 创建工程的主类

@SpringBootApplication
public class OrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class,args);
    }
}

3 创建配置文件application.yml
在这里插入图片描述
4 创建OrderMapper接口
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vFFMMwSp-1625574321499)(C:\Users\86187\Desktop\微信截图\微信截图_20210706195807.png)]
注意:在主启动类添加包扫描
在这里插入图片描述

5 创建OrderService接口

public interface OrderService {
    /**
     * 保存订单信息
     * @param order
     * @return 是否保存成功
     */

    public String saveOrder(Order order);
}

6 创建OrderServiceImpl实现类

@Service
public class OrderImplement implements OrderService{
    @Resource
    private OrderMapper orderMapper;

    @Override
    public String saveOrder(Order order) {
      orderMapper.insert(order);
        return "保存成功";
    }
}

7 创建OrderController类

@RestController
@RequestMapping("order")
public class OrderController {
    @Autowired
    private OrderService orderService;
    @Resource
    private RestTemplate restTemplate;

    @GetMapping("saveOrder")
    public String saveOrder(Long pid,Integer num) {
        Order order = new Order();
        order.setNumber(num);
        order.setUid(1);
        order.setUsername("aaaa");
        order.setPid(pid);
        //根据商品ID查询商品对应的信息----->调用远程商品类服务
        //springboot封装了一个工具,可以完成业务之间的调用
        Product product = restTemplate.getForObject("http://localhost:8081/product/findById/" + pid, Product.class);
        order.setPname(product.getPname());
        order.setPprice(product.getPprice());

        orderService.saveOrder(order);
        return "下单成功";
    }
}

8 启动工程测试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GbKsBqvo-1625574321499)(C:\Users\86187\Desktop\微信截图\微信截图_20210706161632.png)]
在主启动类添加Bean

 @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值