SpringCloud是什么?
springcloud是一系列框架的有序集合。它利用springboot的开发便利性巧妙地简化了分布式系统基础设施的开发
如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。
Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,
通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
SpringCloud的核心功能:
服务注册与发现: Spring Cloud Eureka
负载均衡: Spring Cloud Ribbon
断路器: Spring Cloud Hystrix
声明式服务调用: Spring Cloud Feign
路由: Spring Cloud Zuul
分布式配置中心: Spring Cloud Config
SpringCloud的版本说明
springcloud项目是由多个独立项目集合而成的,每个项目都是独立的,各自进行自己的迭代和版本发布。
所以springcloud不方便使用版本号来管理,而是使用版本名。以避免和子项目版本号的冲突。
版本名的来源是伦敦的地铁站名,以字母排序。比如最早的Release版本为Angel,第二个Release版本为Brixton。。。
当一个版本的update积累的比较多或者解决了一个严重bug时,会发布一个ServiceRelease版本,简称SR,
后面带的数字就是该大版本下的第一次发布。
创建springcloud项目
项目名简述:
springcloud01 主模块 quickstart项目
eureka-server 子模块 springboot项目
eureka-provider 子模块 springboot项目
eureka-consumer01 子模块 springboot项目
eureka-consumer02 子模块 springboot项目
第一步:创建主模板Maven项目的 Maven-archetype-quickstart
File----New----Project
然后下一步,finish完成
第二步: 创建子模板 springboot项目
最后finish完成。按照这个步骤创建好剩下的三个项目
到这里来项目就创建完了
在模块中下载SpringCloud架包,并且子模块继承父模块
第一步:到https://start.spring.io/网站中,生成一个项目
把压缩文件中pom.xml里面的所有内容复制到eureka-server中的pom.xml中
然后改二处地方
第一处:将
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.11.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
改成
<parent>
<groupId>springcloud01</groupId><!--这里是主模块的名字-->
<artifactId>springcloud01</artifactId><!--这里是主模块的名字-->
<version>1.0-SNAPSHOT</version><!--版本号-->
<relativePath/> <!-- lookup parent from repository -->
</parent>
第二处:将<description>Demo project for Spring Boot</description>改为 <packaging>jar</packaging>
注:如果它org.springframework.boot架包报错,就把自己本地仓库的lastup文件后缀名的删除,然后把代码中下载的test的架包删除,到父模块中下载
附代码
子模块
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>springcloud01</groupId>
<artifactId>springcloud01</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath/> <!-- 改动第一处 -->
</parent
<groupId>com.ywy</groupId>
<artifactId>eureka-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka-server</name>
<packaging>jar</packaging>
<!--<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR4</spring-cloud.version>
</properties>--><!--这里放到父模块中-->
<dependencies>
<!--注释的放到父模块中,子模块中这里只放当前模块要用的架包,别的地方不用的-->
<!--<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>-->
<!--<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>-->
</dependencies>
<!--放到父模块中-->
<!--<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>
</dependencies>
</dependencyManagement>-->
<build>
<!--放到父模块中-->
<!--<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>-->
</build>
</project>
父模块 springcloud01中
<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.11.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>springcloud01</groupId>
<artifactId>springcloud01</artifactId>
<version>1.0-SNAPSHOT</version>
<name>springcloud01</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<!--配置字符编码-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<!--从压缩包中复制过来的-->
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR4</spring-cloud.version>
</properties>
<!--配置子模块-->
<modules>
<module>eureka-server</module>
</modules>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--这里是下载的公共都会用到的架包-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!--子模块中复制的-->
<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>
</dependencies>
</dependencyManagement>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
<!--子模块中复制的-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
还有最后三个操作
第一:在父(主)模块中的resources的文件夹中的application的配置(我用的是yml)
# 端口号
server:
port: 7101
# 服务注册相关配置
eureka:
# 服务实例主机名
instance:
hostname: localhost
# 服务提供者配置
client:
# registerWithEureka=false表示当前服务注册中心不在其他服务注册中心进行注册(当服务注册中心是单点而非高可用时的配置方式)
# fetchRegistry=false表示当前服务注册中心不获取其他服务注册中心的注册信息(当服务注册中心是单点而非高可用时的配置方式)
# 这两个配置,只有在当服务注册中心是单点配置时必然为false。
registerWithEureka: false
fetchRegistry: false
# 注册中心地址,即http://localhost:7101/eureka
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
第二:在子模块中的resources的文件夹中application的配置
# 端口号
server:
port: 7201
# 服务名称
spring:
application:
name: eureka-provider
# 服务注册与发现相关配置
eureka:
client:
# 注册中心地址
serviceUrl:
defaultZone: http://localhost:7101/eureka/
第三步:
主模块中eureka-server中的启动类加@EnableEurekaServer
在子模块中启动类EurekaProviderApplication.java上添加@EnableEurekaClient注解,点击运行即可,
打开浏览器,输入:http://localhost:7101即可
如果有问题,可以问我,谢谢。