什么是SpringCloud
SpringCloud是基于SpringBoot的一整套实现微服务的框架。他提供了微服务开发所需的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等组件。最重要的是,跟spring boot框架一起使用的话,会让你开发微服务架构的云服务非常好的方便。
springCloud的框架搭建
创建一个父工程
我们是用maven来创建项目,创建项目所用的module都应该一样,其他的工程应该继承这个父工程;故只需要写一个pom文件即可。
创建一个maven工程以此工程为父工程其他的工程继承此工程;写破门文件。
1、pom文件
<?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>
<!--springboot版本启动器,-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!--本项目的描述资料-->
<groupId>com.zhiyou100</groupId>
<artifactId>server-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>server-parent</name>
<description>父工程用来定义版本号</description>
<!--版本定义-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<!--springcloud版本 从A到G-->
<spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<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>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
创建服务注册中心,他的作用是对创建的所有子系统进行管理
在同级目录下创建一个maven
导入pom文件
<?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>com.zhiyou100</groupId>
<artifactId>server-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.zhiyou100</groupId>
<artifactId>server-erueka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>server-erueka</name>
<description>Demo project for Spring Boot</description>
<!--引入服务注册中心依赖-->
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
</project>
在主类上添加注解@EnableEurekaServer
再然后就是书写配置文件
#端口
server.port=8000
#应用在服务注册中心的名字
spring.application.name=eureka-server
#将该服务安装到本地--》localhost代表本机
eureka.instance.hostname=localhost
#r是否将自己注册到服务注册中心
eureka.client.register-with-eureka=false
#fetchRegistry表示是否从eureka服务器获取注册信息。
eureka.client.fetch-registry=false
#其他服务访问该服务的路径,服务注册到服务注册中心使用的路径http://localhost:8000/eureka/
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
启动服务配置中心输入主机与端口号验证http://localhost:8000/;在运行之前删除
测试test文件夹,如果不删除就导入test的依赖;此工程未导入依赖。
创建服务的提供者:创建一个maven注册到服务中心中,在配置文件中的spring.application.name配置就是为了方便消费者通过服务中心调用。
创建maven导入pom文件
<?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项目-->
<parent>
<groupId>com.zhiyou100</groupId>
<artifactId>server-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.zhiyou100</groupId>
<artifactId>server-hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>server-hello</name>
<description>服务的提供者,返回hello你好</description>
<dependencies>
<!--引入client依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--引入web启动器,编写controller需要用到-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
导入配置文件
#端口
server.port=8001
#在服务注册中心中的名字,就是通过这个名字调用服务
spring.application.name=server-hello
#提交到这个注册中心
eureka.client.service-url.defaultZone=http://localhost:8000/eureka/
在主类上添加注解@EnableEurekaClient
写返回数据服务
服务的消费者:他调用服务层
消费层有两种书写方法分别为rebbion和feign
导入pom文件
<?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>com.zhiyou100</groupId>
<artifactId>server-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.zhiyou100</groupId>
<artifactId>server-rebbion</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>server-rebbion</name>
<description>Demo project for Spring Boot</description>
<dependencies>
<!--引入clietn依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--引入web启动器,编写controller需要用到-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--引入rebbion依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
</dependencies>
</project>
导入配置文件
#端口
server.port=8010
#spring.application.name非常重要,服务直接的调用是根据这个name值来相互调用的
spring.application.name=server-ribbon
#提交到这个注册中心
eureka.client.service-url.defaultZone=http://localhost:8000/eureka/
书写配置类
创建RestTemplate对象
主类
写@EnableEurekaClient注解
创建service
使用RestTemplate调用server-hello服务,不写接口,直接写实现类
创建Controller调用service即可
在启动时注意先后顺序
先启动服务注册中心,启动服务提供者,消费者。