柏竹 柏竹
首页
后端
前端
  • 应用推荐
关于
友链
  • 分类
  • 标签
  • 归档

柏竹

奋斗柏竹
首页
后端
前端
  • 应用推荐
关于
友链
  • 分类
  • 标签
  • 归档
  • Java基础

  • JavaWeb

  • 拓展技术

  • 框架技术

  • 数据库

  • 数据结构

  • Spring

  • SpringMVC

  • SpringBoot

  • SpringClound

    • SpringCloud认知
      • Spring Cloud版本
      • 首次应用
    • SpringCloud Eureka注册中心
    • SpringCloud Ribbon负载均衡
    • SpringCloud Hystrix熔断器
    • SpringCloud Feign
    • SpringCloud Gateway网关
    • SpringCloud Config配置中心
    • SpringCloud Bus服务总线
  • Ruoyi-Vue-Plus

  • 后端
  • SpringClound
柏竹
2021-10-15
目录

SpringCloud认知

# Spring Cloud 认知

Spring Cloud 是一系列框架的集合,它整合了优秀框架到自己项目中。其中实现了:配置管理、服务发现、智能路由、负载均衡、熔断器、控制总线等功能。

主要涉及到的组件:

  • Eureka:服务注册中心,用于服务管理
  • Ribbon:基于客户端的负载均衡组件
  • Hystrix:容错框架,能够防止服务的雪崩效应
  • Feign:Web 服务客户端,能够简化 HTTP 接口的调用
  • Zuul:API 网关,提供路由转发、请求过滤等功能
  • Config:分布式配置管理
  • Sleuth:服务跟踪
  • Stream:构建消息驱动的微服务应用程序的框架
  • Bus:消息代理的集群消息总线

# Spring Cloud版本

Spring Cloud 是个众多 子项目 综合起来的大项目,因此对 微服务构架 解决方案有 综合的组件,其中组件之间都是独立的,它们各自维持着自己版本号的 迭代与更新

Spring Cloud 和 Spring Boot版本 对应关系

Release Train Boot Version
Hoxton 2.2.x
Greenwich 2.1.x
Finchley 2.0.x
Edgware 1.5.x
Dalston 1.5.x

# 首次应用

微服务模拟场景

微服务是由多个子项目组合而成的父项目。以下首次应用模拟 服务 提供 和 调用 应用(查数据测试

  1. 创建 ==父项目== 无骨架Maven项目

  2. 配置父项目 pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.sans</groupId>
        <artifactId>springcloud-father</artifactId>
        <!--配置 聚合父工程-->
        <packaging>pom</packaging>
        <version>1.0-SNAPSHOT</version>
    
        <modules>
            <module>user-service</module>
            <module>consumer-demo</module>
        </modules>
    
        <!--配置 父项目-->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.5.RELEASE</version>
            <relativePath/>
        </parent>
    
        <!--Spring 与 Spring Cloud 版本号必须对应-->
        <properties>
            <java.version>1.8</java.version>
            <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
            <mapper.starter.version>2.1.5</mapper.starter.version>
            <mysql.version>5.1.46</mysql.version>
        </properties>
    
        <!-- 统一管理依赖 -->
        <dependencyManagement>
            <dependencies>
                <!-- springCloud -->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                <!-- 通用Mapper启动器 -->
                <dependency>
                    <groupId>tk.mybatis</groupId>
                    <artifactId>mapper-spring-boot-starter</artifactId>
                    <version>${mapper.starter.version}</version>
                </dependency>
                <!-- mysql驱动 -->
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>${mysql.version}</version>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
        <dependencies>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    
    • <dependencyManagement> 可统一配置 子项目的版本号 (子项目无需在进行版本号的锁定
    • Spring Cloud 和 Spring Boot 版本 必须严格对应指定版本
    • 配置该项目为聚合父工程 <packaging>pom</packaging>
  3. 在父项目下创建 ==提供者== 无骨架Maven项目(用于 用户业务操作服务

  4. 提供者项目 pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    
        <parent>
            <artifactId>springcloud-father</artifactId>
            <groupId>com.sans</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>user-service</artifactId>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!-- 通用Mapper启动器 -->
            <dependency>
                <groupId>tk.mybatis</groupId>
                <artifactId>mapper-spring-boot-starter</artifactId>
            </dependency>
            <!-- mysql驱动 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
        </dependencies>
    
    </project>
    

    组件依赖的版本号由父项目的pom进行配置

  5. 提供者项目 大致流程 (opens new window) (==controller、mapper、pojo、service、启动类 组件==

    • 配置需要改 端口号 , 提供者 和 调用者 端口以防冲突
    • controller提供的接口: http://localhost:80/user/2 (按ID查用户)
  6. 在父项目下创建 ==调用者== 无骨架Maven项目 (通过提供者获取接口进行 用户业务操作服务

  7. 调用者项目 只需 ==添加web依赖 、模板方法、实体pojo、contoller==

  8. 调用者项目 pom.xml

    <!--调用者只需一个web依赖-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    
  9. 调用者项目 启动器类 添加模板工具方法

    @SpringBootApplication
    public class Application {
        
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
        
        @Bean
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }
        
    }
    
  10. 调用者项目 contoller ( pojo的User实体类、端口无配置默认8080

    @RestController
    @RequestMapping("consumer")
    public class ConsumerController {
        
        @Autowired
        private RestTemplate restTemplate;
        
         @RequestMapping("{id}")
        public User findById(@PathVariable Long id) {
            String url = "HTTP://localhost:9091/user/"+id;
            return restTemplate.getForObject(url , User.class);
        }
        
    }
    

    Spring提供了一个 RestTemplate模板工具类,对基于HTTP的客户端进行了封装,并且实现了 对象 与 json的序列化 、反序列化,非常方便。RestTemplate并没有限定HTTP的客户端类型,而是进行了抽象,目前常用的3种都有支持:

    • HTTPClient
    • OkHTTP
    • JDK原生的URLConnection(默认的)
  11. 测试 分别启动两个子项目

    通过 调用者接口中应用 提供者的接口

    访问 http://localhost:8080/consumer/2 (按ID查用户)


    仓库代码 : https://gitee.com/Bozhu12/spring-cloud-examples.git (opens new window)

#SpringClound#Java

← SpringBoot部署 SpringCloud Eureka注册中心→

最近更新
01
HTTPS自动续签
10-21
02
博客搭建-简化版(脚本)
10-20
03
ruoyi-vue-plus-部署篇
07-13
更多文章>
Theme by Vdoing | Copyright © 2019-2024 | 桂ICP备2022009417号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式