Spring Cloud + Spring Cloud Alibaba 第二天

微服务组件演进
本文介绍了微服务架构中关键组件的发展变化,包括服务注册中心从Eureka到Nacos的转变,服务调用方式由Ribbon向LoadBalancer的过渡,以及服务网关从Zuul到Gateway的迁移等。

关于 cloud 各种组件的停更/升级/替换

我们先来了解一下微服务中各个组件的停更/升级/替换

  • 服务注册中心

    • Eureka 许多一开始使采用微服务架构的在使用 Eureka 作为服务注册中心
    • zookeeper 与 Dubbo 成体系
    • Consul 目前使用的较少(为了知识完整性,会学习一下)
    • Nacos 阿里主推的,入驻 Spring Cloud,很重要
  • 服务调用

    • Ribbon
    • LoadBalancer 正在萌芽阶段,有可能会取代 Ribbon
  • 服务调用2

    • Feign 已经不再使用了,逐步被 OpenFeign 替代
    • OpenFeign
  • 服务降级

    • Hystrix 经典的“豪猪哥”,目前国内还有很多在使用
    • resilience4j
    • sentienl 阿里巴巴推出的,很重要
  • 服务网关

    • zuul 不再更新了
    • zuul2 未来未知
    • gateway 大范围使用
  • 服务配置

    • Config
    • Nacos
  • 服务总线

    • Bus
    • Nacos

父工程 project 的创建

做什么项目

由于是演示项目,因此就做一个经典的支付订单服务就可以了。

创建项目

本项目以 Idea 为开发工具 File – New – Project 创建 Maven 项目

设置父工程的名称

选择 Maven 版本

统一使用 maven 3

设置字符编码

设置注解生效激活

Java 版本选择8

父工程 pom 文件

当整个项目初始化完成之后,需要改写父工程 pom 文件,引入所有需要的依赖,依赖内容如下:

<!--
    packing的默认值为jar
    父工程的packing是pom
        pom的意思是使用maven的分模块管理,一般pom中配置这个,表示pom项目里面没有java代码
        只是为了聚合工程或传递依赖使用的
        一般来说父工程的packing都是pom
        例如:当设置为pom的时候,application.yml中配置的端口号也不会生效
-->
<packaging>pom</packaging>


<!--统一管理各种jar包的版本-->
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
    <junit.version>4.12</junit.version>
    <lombok.version>1.18.10</lombok.version>
    <log4j.version>1.2.17</log4j.version>
    <mysql.version>5.1.47</mysql.version>
    <druid.version>1.1.16</druid.version>
    <mybatis.spring.boot.version>2.1.1</mybatis.spring.boot.version>
    <spring-boot.version>2.2.2.RELEASE</spring-boot.version>
    <spring-cloud.version>Hoxton.SR1</spring-cloud.version>
    <spring-cloud-alibaba.version>2.1.0.RELEASE</spring-cloud-alibaba.version>
</properties>


<dependencyManagement>
    <dependencies>
        <!--spring boot 2.2.2.RELEASE-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!--集成spring cloud-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!--集成spring cloud alibaba-->
        <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>
        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
            <scope>runtime</scope>
        </dependency>
        <!-- druid-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>${druid.version}</version>
        </dependency>
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>${mybatis.spring.boot.version}</version>
        </dependency>
        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
        </dependency>
        <!--log4j-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

<build>
    <finalName>springcloud-learn-2020</finalName>
    <!--maven插件-->
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <fork>true</fork>
                <addResources>true</addResources>
            </configuration>
            <version>2.2.2.RELEASE</version>
        </plugin>
    </plugins>
</build>

至此,整个父工程就已经创建完成了,下期我们将创建第一个微服务模块。

项目代码和相关资料已经开源,需要的可以自行获取。

GitHub地址

码云地址

### Spring Cloud Alibaba 开发框架使用指南 Spring Cloud Alibaba 是一个由阿里巴巴维护的开源项目,旨在为分布式应用开发提供一站式解决方案。该项目基于 Spring Cloud 框架,主要使用 Java 语言进行开发。它整合了阿里巴巴中间件的分布式解决方案,使得开发者能够轻松地将 Spring Cloud 应用程序连接到阿里巴巴的分布式服务中 [^2]。 #### 核心功能 Spring Cloud Alibaba 提供了一系列核心功能,包括但不限于服务注册与发现、配置中心、服务熔断与降级、分布式事务等。这些功能使得开发者能够更高效地构建管理分布式系统。 - **服务注册与发现**:使用 Nacos 作为服务注册中心,可以实现服务的自动注册与发现。 - **配置中心**:通过 Nacos 或其他配置中心组件,实现应用配置的集中管理。 - **服务熔断与降级**:使用 Sentinel 实现服务的熔断与降级,提高系统的稳定性容错能力。 - **分布式事务**:通过 Seata 实现跨服务的事务一致性。 #### 配置示例 以下是一个简单的 `application.yml` 配置示例,展示了如何配置数据库连接服务的基本信息: ```yaml # 服务端口 server: port: 8088 # spring服务配置 spring: # 定义服务名 application: name: user-service # 定义数据库的连接信息 datasource: type: com.alibaba.druid.pool.DruidDataSource url: jdbc:mysql://127.0.0.1:3306/CoreSystemBase?useUnicode=true&characterSetResults=utf8 password: Y051017529sh username: root driver-class-name: com.mysql.jdbc.Driver # json 日期格式化问题 jackson: date-format: yyyy-MM-dd HH:mm:ss # 解决json返回时,中国时间少8个小时的问题 time-zone: GMT+8 ``` #### 开发建议 1. **学习资源**:市面上有很多关于 Spring Cloud Alibaba 的学习资源,建议选择最新的实战教程,以确保学习的内容与实际应用相符。 2. **社区支持**:积极参与 Spring Cloud Alibaba 的社区讨论,获取最新的技术动态支持。 3. **实践项目**:通过实际项目来加深对 Spring Cloud Alibaba 各个组件的理解应用,提升开发技能。 Spring Cloud Alibaba 提供了更完整的功能、更好用的 API,同时在中文的加持下让复杂的微服务架构变得不再高不可攀。目前,Spring Cloud Alibaba 已经成为事实上的国内微服务技术标准,这也是为什么极力推荐学习 Spring Cloud Alibaba 的重要原因 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值