文章目录
-
- 一: 什么是SpringCloud
- 二:创建注册中心
- 三:创建服务发现
- 四:保护模式
一: 什么是SpringCloud
Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems (e.g. configuration management, service discovery, circuit breakers, intelligent routing, micro-proxy, control bus, one-time tokens, global locks, leadership election, distributed sessions, cluster state). Coordination of distributed systems leads to boiler plate patterns, and using Spring Cloud developers can quickly stand up services and applications that implement those patterns. They will work well in any distributed environment, including the developer’s own laptop, bare metal data centres, and managed platforms such as Cloud Foundry.
翻译如下:
Spring Cloud为开发人员提供了快速构建分布式系统中的一些常见模式的工具(例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导层选举、分布式会话、集群状态)。分布式系统的协调导致了锅炉板模式,使用Spring Cloud开发人员可以快速建立实现这些模式的服务和应用程序。它们在任何分布式环境中都能很好地工作,包括开发人员自己的笔记本电脑、裸机数据中心和云计算等托管平台。
SpringCloud主要框架:
- 服务发现——Netflix Eureka
- 服务调用——Netflix Feign
- 熔断器——Netflix Hystrix
- 服务网关——Netflix Zuul
- 分布式配置——Spring Cloud Config
- 消息总线 —— Spring Cloud Bus
二:创建注册中心
1.先创建一个maven项目:如下

直接下一步即可
2,创建一个eureka(注册中心)项目:
选择
Spring Initializr
,点击next
选择
Eureka Server
,点击下一步即可,
创建完项目中,
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 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.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.ml</groupId>
<artifactId>m_eureka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>m_eureka</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR2</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>
创建一个
application.yml
文件,加入以下配置
server:
port: 8761
spring:
profiles:
active: dev # 指定环境(可省略)
application:
name: eureka # 服务名称(各服务之间调用会用到)
eureka:
instance:
#注册中心服务的主机,默认是localhost
hostname: localhost
client:
#是否将当前微服务注册到Eureka服务中。自己是注册中心,因此无需注册。在搭建 Eureka Server 双节点或集群的时候,要把 eureka.client.register-with-eureka 和 eureka.client.fetch-registry 均改为 true(默认)。
register-with-eureka: false
#是否从Eureka中获取注册信息。自己是注册中心,因此无需获取。
fetch-registry: false
#Eureka客户端与与Eureka服务端进行交互的地址Map表
service-url:
#默认http://localhost:8761/eureka/
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
eureka中自带的有注册中心页面,加入
@EnableEurekaServer
注解,开启Eureka服务,如图:
eureka server集群配置
启动后,访问
http://127.0.0.1:8761
,进入注册中心:
三:创建服务发现
1.创建discovery项目,如图:
2,步骤和eureka类似,选择
Eureka Discovery Client
在
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 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.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.ml</groupId>
<artifactId>discovery</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>discovery</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</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>
创建
application.yml
,加入以下配置
server:
port: 8086
spring:
profiles:
active: dev # 指定环境(可省略)
application:
name: discovery # 服务名称(各服务之间调用会用到)
# 以上配置跟eureka没什么区别
eureka:
client:
#Eureka服务的地址
service-url:
defaultZone: http://localhost:8761/eureka/
instance:
#用于表示在猜测主机名时,服务器的IP地址应该与操作系统报告的主机名相对应。(注册服务和客户端如果在一台机器上则无需配置)
prefer-ip-address: true
加完配置后,还需要在启动类上加上注解
@EnableDiscoveryClient
package com.ml.discovery;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient //可以省略,因为pom中引入spring-cloud-starter-netflix-eureka-client,就会被默认当做客户端
@EnableDiscoveryClient //开启服务发现
public class DiscoveryApplication {
public static void main(String[] args) {
SpringApplication.run(DiscoveryApplication.class, args);
}
}
启动discovery服务,咱们再看下有没有注册到eureka注册中心上呢??答案:如下图
四:保护模式
停掉其中的某服务,再默认等待1分钟,注册实例列表的上方会出现红色的字体提示,内容为:
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY’RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
如果在Eureka Server的首页看到以下这段提示,则说明Eureka已经进入了保护模式。
解释如下:
Eureka Server在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%,如果出现低于的情况(在单机调试的时候很容易满足,实际在生产环境上通常是由于网络不稳定导致),Eureka Server会将当前的实例注册信息保护起来,同时提示这个警告。保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。
【了解】
关闭保护模式(如无特殊需要,不建议):
Eureka server的
application.yml
eureka:
server:
#是否开启安全保护,默认是true开启。
enableSelfPreservation: false
#清理间隔(单位毫秒,默认是60*1000)
eviction-interval-timer-in-ms: 6000
微服务的
application.yml
eureka:
instance:
#租期更新时间间隔(默认30秒)
leaseRenewalIntervalInSeconds: 10
#租期到期时间(默认90秒)
leaseExpirationDurationInSeconds: 30
SpringCloud文档:点击查看
开心一刻
一天晚上,妈妈哄她10岁的儿子独自到他自己的房里睡觉,小家伙就是要妈妈陪着睡,无奈的妈妈就说“你羞不羞,这么大的人还要妈妈陪着睡!”
“爸爸不是更大了还要你天天陪着睡!”儿子理直气壮地说。
如果觉得不错,帮忙点个赞,您的点赞将是我的动力!
下一篇:Feign的使用