一)SpringCloud简介
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。
Spring Cloud为开发人员提供了工具,以快速构建分布式系统中的某些常见模式(例如,配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,领导选举,分布式会话,群集状态)。
springcloud对应版本:
SpringCloud版本 | SpringBoot版本 |
Hoxton | 2.2.x |
Greenwich | 2.1.x |
Finchley | 2.0.x |
Edgware | 1.5.x |
Dalston | 1.5.x |
springcloud发布版本详情查看步骤:
第一步:登录到Spring官网,点击那个猫头,跳转的github
第二步:刚进入页面时,停留在Code Tab页,需手动切换到Wiki页
二)Eureka注册中心
第一步:先创建一个maven项目,在pom.xml中引入SpringBoot的Jar、再引入SpringCloud的jar,对应jar版本可按照上面方式自行查看。
pom.xml内容:
<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.oysept</groupId>
<artifactId>my_eureka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<!-- properties声明一些公共配置,该节点配置了自定义属性即可在任意地方使用,通过${}访问,形式如${java.version} -->
<properties>
<java.version>1.8</java.version>
</properties>
<!-- springboot版本信息 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
</parent>
<!-- dependencyManagement的作用其实相当于一个对所依赖jar包进行版本管理的管理器 -->
<!--
说明1:如果dependencies里的dependency自己没有声明version元素,那么maven就会倒dependencyManagement里面去找有没有对该artifactId和groupId进行过版本声明,
如果有,就继承它,如果没有就会报错,告诉你必须为dependency声明一个version
说明2:如果dependencies中的dependency声明了version,那么无论dependencyManagement中有无对该jar的version声明,都以dependency里的version为准。
-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- 引入springcloud server jar -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
<!-- maven打包插件,在cmd命令窗口执行,如: mvn install -U -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
第二步:在application.yml中添加Eureka注册中心需要的配置信息
application.yml配置:
注:spring.application.name应用名称中不能包含下划线,否则容易报Request URI does not contain a valid hostname:http://xxx错误。
# 注册中心的默认端口号, 可以随意指定一个未使用的端口
server:
port: 8761
# 应用名称, 如不指定, 会随意默认一个名称
spring:
application:
name: my-eureka-ouyangjun
# Erueka注册中心配置
eureka:
instance:
# IP地址
hostname: localhost
client:
# 表示是否将自己注册到Eureka Server中,默认为true, 由于当前应用就是 Eureka Server, 故而设置为false
registerWithEureka: false
# 表示是否从 Eureka Server中获取注册信息, 默认为true, 因为这是一个单点的 Eureka Server, 不需要同步其它的 Eureka Server 节点的数据, 故而设置为 false
fetchRegistry: false
serviceUrl:
# 设置与Eureka Server交互的地址, 查询服务和注册服务都需要依赖这个地址. 默认http://localhost:8761/eureka; 多个地址可以使用","分隔
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
第三步:创建一个Spring启动类,依赖于SpringBoot启动方式,启动之后不要停止
package com.oysept;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
* Eureka服务注册中心
* 地址: http://localhost:8761/eureka/
* 注意事项: MyEurekaApplication.java一定要在com.oysept包或者子包下,不然扫描不到
* @author ouyangjun
*
* @SpringBootApplication 是 @Configuration、@EnableAutoConfiguration、@ComponentScan注解简化
* @EnableEurekaServer 该注解表明应用为eureka服务,有可以联合多个服务作为集群,对外提供服务注册以及发现功能
*/
@SpringBootApplication
@EnableEurekaServer
public class MyEurekaApplication {
public static void main(String[] args) {
// SpringBoot启动方式一(常用)
//SpringApplication.run(MyEurekaApplication.class, args);
// SpringBoot启动方式二, 内部实现也是调用了SpringApplication.run()方法
new SpringApplicationBuilder(MyEurekaApplication.class).run(args);
}
}
第四步:直接启动MyEurekaApplication中main方法,然后在浏览器中输入:http://localhost:8761
界面如下:
第五步:Eureka注册中心,maven项目结构图
三)服务提供者
第一步:创建一个maven项目,引入pom.xml配置
pom.xml内容:
<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.oysept</groupId>
<artifactId>my_server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<!-- properties声明一些公共配置,该节点配置了自定义属性即可在任意地方使用,通过${}访问,形式如${java.version} -->
<properties>
<java.version>1.8</java.version>
</properties>
<!-- springboot版本信息 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
</parent>
<!-- dependencyManagement的作用其实相当于一个对所依赖jar包进行版本管理的管理器 -->
<!--
说明1:如果dependencies里的dependency自己没有声明version元素,那么maven就会倒dependencyManagement里面去找有没有对该artifactId和groupId进行过版本声明,
如果有,就继承它,如果没有就会报错,告诉你必须为dependency声明一个version
说明2:如果dependencies中的dependency声明了version,那么无论dependencyManagement中有无对该jar的version声明,都以dependency里的version为准。
-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 引入springcloud client jar -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
<!-- maven打包插件,在cmd命令窗口执行,如: mvn install -U -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
第二步:引入application.yml配置
application.yml配置:
注:spring.application.name应用名称中不能包含下划线,否则容易报Request URI does not contain a valid hostname:http://xxx错误。
server:
port: 8762
spring:
application:
name: my-server-ouyangjun
eureka:
instance:
hostname: localhost
client:
serviceUrl:
# 表示需要把服务注册到Eureka注册中心上, 这里是Eureka注册中心的地址
defaultZone: http://localhost:8761/eureka/
第三步:创建一个MyServerApplication启动类
MyServerApplication.java:
package com.oysept;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* @EnableDiscoveryClient基于spring-cloud-commons, @EnableEurekaClient基于spring-cloud-netflix。
就是如果选用的注册中心是eureka,那么就推荐@EnableEurekaClient,如果是其他的注册中心,那么推荐使用@EnableDiscoveryClient。
@EnableEurekaClient源码上有@EnableDiscoveryClient注解,可以说基本就是EnableEurekaClient有@EnableDiscoveryClient的功能
*
* @author ouyangjun
*/
@SpringBootApplication
@EnableDiscoveryClient
public class MyServerApplication {
public static void main(String[] args) {
// SpringBoot启动方式一(常用)
SpringApplication.run(MyServerApplication.class, args);
}
}
第四步:启动MyServerApplication之后,在浏览器中刷新Eureka服务注册中心地址:http://localhost:8761
第五步:服务提供者,maven项目结构图
识别二维码关注个人微信公众号
本章完结,待续,欢迎转载!
本文说明:该文章属于原创,如需转载,请标明文章转载来源!