一、什么是Sping Cloud?
Spring提供了一系列工具,可以帮助开发人员迅速搭建分布式系统中的公共组件(比如:配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,主节点选举, 分布式session, 集群状态)。协调分布式环境中各个系统,为各类服务提供模板性配置。使用Spring Cloud, 开发人员可以搭建实现了这些样板的应用,并且在任何分布式环境下都能工作得非常好。
Spring Cloud是基于Spring Boot之上的应用,目的是为了如何解决如何快速搭建一个分部式系统。只需要按照相应的规则配置就可以快速搭建一个分布式系统。一般分布式系统都有一个注册中心,如Dubbo,Zookeeper分布都会有一个注册中心提供给其它地方调用,Spring cloud也是一样有服务端和客户端,下面来说Spring Cloud是如何进行注册和管理的。
Spring Cloud使用一个叫eureka server的注解来进行声明,而客户端使用enreka client注解,eureka没用提供缓存的机制,每个实例之后需要像注册中心发送心跳(心跳:每隔多少秒请求一次 如果有返回信息,则表示在进行使用,如果没有返回则服务就挂掉了),使用eureka的服务端和客户端配置基本一样,做为服务端的只需要设置两个参数registerWithEureka和fetchRegistry 都设置为false 表示是服务端用来注册服务,如果没有设置则表示是客户端。下面我们来看具体的实例。
二、如何搭建一个Sping Cloud?
1、Spring Cloud是基于Spring Boot之上,新建一个Spring Boot工程如图:
这里要选择Eureka Server依赖 点击完成。
***
注意的是如果搭建下来pom.xml出现错误,提示一些包没在本地仓库,那么是你的maven包有些冲突了,需要新建一个maven仓库进行加载
*******
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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>eureka-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka-server</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2、进入主程序类增加@EnableEurekaServer注解
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
3、增加配置文件properties.yml 内容如下:
#服务端端口
server:
port: 8761
#配置服务端口URL路径 共客户端使用
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
其中我们指定了服务端的端口,名称和暴露地址URL 设置了两个参数registerWithEureka和fetchRegustry都设置了false表示这是一个服务端。
4、运行主程序EurekaServerApplication.java。
5、在URL地址中输入:locahost:8761 如图:
可以看到如何界面这是spring Eureka提供的系统环境,里面包含了各种信息,其中主要的是Application参数 表示有哪些服务进行注册了。
6、以上就表示一个服务端了,下面我们新建一个客户端,新建项目和上面一样,完成后进入主程序修改如图:
@EnableEurekaClient //eureka客户端表明
@SpringBootApplication
@RestController //页面返回内容
public class EurekaClientApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaClientApplication.class, args);
}
@Value("${server.port}") //得到客户端口
String port;
@RequestMapping("/hi") //访问路径
public String home(@RequestParam String name) {
return "hi "+name+",i am from port:" +port;
}
}
7、增加客户端的application.yml文件内容如下:
#1客户端端口
server:
port: 8763
#客户端配置
eureka:
instance:
hostname: localhost #声明
client:
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:8761/eureka/ #这里就是服务端暴露的地址
#应用程序名字用于调用
spring:
application:
name: eureka-client #项目名称(无论多少客户端多少个 名称要保持一样,例如 project2项目的properties 也是这个名称只是端口不一样)
8、接我们先运行Eureka server项目 之后再运行Eureka Client项目 结果如图 :
多了一个叫eureka-client的名称也就是我们客户端的名称以及后面的端口 我们访问下客户端url地址:
http://localhost:8763/hi?name=miku
显示 hi miku,i am from port:8763 说明服务已经注册好了。
总结:服务端暴露地址给客户端,客户端使用服务端提供的地址进行注册,客户端就可以编写业务功能。
以上就Spring Boot和Spring Cloud之间的注册和发现,使用的是Eureka(Eureka Server依赖)。