springCloud
初始springCloud
- 后台硬:作为spring家族的一员,有整个spring全家桶靠山,背景十分强大
- 技术强:spring作为java领域的前辈,可以说是功力深厚,有强力的技术团队支撑
- 群众基础好:大多数程序员的成长都伴随着spring框架,springCloud与spring的各个框架无缝整合
- 使用方便:springCloud完全支持springBoot的开发,用很少的配置就能完成微服务框架的搭建
- springCloud将现在非常流行的一些技术整合到一起,实现了诸如:配置管理,服务发现,智能路由,负载均衡,熔断器,控制总线,集群状态等等功能
- 官网
主要集成框架
Netflix(国外影视公司)
- Eureka:注册中心
- Zuul:服务网关
- Ribbon:负载均衡
- Feign:服务调用
- Hystix:熔断器
- 等
spring Cloud项目
idea
创建父工程
一般父工程只负责包的版本
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.SR1</spring-cloud.version>
<mapper.starter.version>2.0.3</mapper.starter.version>
<mysql.version>5.1.32</mysql.version>
<pageHelper.starter.version>1.2.5</pageHelper.starter.version>
<leyou.latest.version>1.0.0-SNAPSHOT</leyou.latest.version>
<fastDFS.client.version>1.26.1-RELEASE</fastDFS.client.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}s</version>
</dependency>
<!--分页助手-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pageHelper.starter.version}</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!--fastDFS客户端-->
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
<version>${fastDFS.client.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
创建子工程步骤
右键项目=>new =>module=>选择springBoot工厂
目录 一定要在父工程里面
例如
父工程项目路径
D:\java\project\springClouddemo1
子工程项目路径
D:\java\project\springClouddemo1\userservice
创建子工程(功能)
写一个有返回值的功能
创建子工程(调用)
使用RestTemplate调用 子工程(功能)
存在问题
- 在调用方吧url写死,后期不便于维护
- 如果功能方路径出现变化,调用方地址失效
- 调用方不知道功能方是否开启(是否处于工作状态)
- 功能方只有一台服务不具备高可用性
- 即使功能方形成集群,调用方还需实现负载均衡
以上问题概括
- 服务管理
- 如何自动注册和发现
- 如何实现状态监管
- 如何实现动态路由
- 服务如何实现负载均衡
- 服务如何解决荣灾文件
- 服务如何实现统一配置
入门案例
Eureka 注册中心
所有子项目都在Eureka注册,调用者需要调用更能是让Eureka去找功能完成调用
- Eureka:就是注册中心(可以是一个集群),对外暴露自己的地址
- 提供者(功能):启动后向Eureka注册自己
- 消费者(调用):向Eureka订阅服务,Eureka会将对应服务的所有提供地址列表发送给消费者,并且定期更新
- 心跳(续约):提供者定期通过http方式向Eureka刷新自己的状态
- 原理
创建Eureaka注册中心
创建maven或者springBoot项目
-
导入依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> <