Eureka服务注册与发现
- 服务注册是指把服务注册到注册中心,服务发现是指注册中心记录分布式系统中的全部服务的信息,以便其他服务能够快速地找到这些已注册的服务。
- 在
pom.xml文件添加以下依赖包,注意spring cloud eureka有两种依赖包,一是服务端,二是客户端,根据当前的系统性质选择。
<?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>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>consumer</groupId>
<artifactId>eureka-consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka-consumer</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<maven-jar-plugin.version>3.0.0</maven-jar-plugin.version>
<!-- spring cloud 依赖包的版本 -->
<spring-cloud.version>2021.0.1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- spring cloud eureka 依赖包(服务端) -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!-- spring cloud eureka 依赖包(客户端) -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!-- spring cloud 依赖包 -->
<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>
- 创建注册中心的服务端项目
- 根据上面的pom.xml去掉客户端的依赖包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
application.yml(服务端)
#服务注册中心 (单节点)
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
fetch-registry: false # 表示是否从Eureka Server获取注册信息,默认为true.因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,这里设置为false
register-with-eureka: false # 表示是否将自己注册到Eureka Server,默认为true.由于当前应用就是Eureka Server,故而设置为false.
service-url:
# 设置与Eureka Server的地址,查询服务和注册服务都需要依赖这个地址.默认是http://localhost:8761/eureka/;多个地址可使用','风格.
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
- 启动类加上
@EnableEurekaServer,表示该类开启Eureka服务端 - application.yml(客户端)
server:
port: 8765
spring:
application:
name: eureka-producer
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka # 指定服务注册中心
- 启动类加上
@EnableEurekaClient,表示该类开启Eureka客户端
Ribbon 负载均衡器
Open Feign 服务间调用api
Hystrix 服务熔断与降级
简介:熔断是指服务A调用服务B,由于服务B存在阻塞,无法及时给服务A返回响应,这时候需要通过断路器把断开服务A的调用。服务降级是为了更好的用户体验,当一个方法被调用异常,通过执行另一个方法来给用户友好的回复。
开启熔断器
- 加入依赖包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
- 在启动类加上注解:
@EnableHystrix,启动熔断降级服务 - 服务熔断:每当调用指定时间超过指定时间,断路器将会中断这个方法的调用。fallbackMethod 的值为指定后备方法的名称
@HystrixCommand( commandProperties = {@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "1200")})
public List<Xxx> getXxxx() {
// ...省略代码逻辑
// 调用另一个服务的方法
}
- 服务降级:指定后备方法,写法如下面代码:
// 指定了后备方法调用
@HystrixCommand(fallbackMethod = "getHystrixNews",commandProperties= {@HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="1000")})
public String get(){
//调用时间超过1秒会
}
//后备方法
public String getHystrixNews(){
//做降级服务逻辑
}
@EnableHystrix与@EnableCircuitBreaker的区别: @EnableHystrix:用来开启Hystrix,包括熔断和降级 @EnableCircuitBreaker:用来启动熔断器
Zuul 服务网关
- 简介
- 亲自测试过很多种maven安装各种版本的zuul框架,存在一些版本不兼容的问题。下面是亲自成功可用zuul服务的pom.xml。
spring-boot-starter-parent用的版本是2.0.3.RELEASE,spring-cloud-dependencies用的版本是Finchley.SR4
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
</parent>
<groupId>zuul</groupId>
<artifactId>eureka-zuul</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka-zuul</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<maven-jar-plugin.version>3.0.0</maven-jar-plugin.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- yaml依赖包,可以解决zuul.prefix报404的问题 -->
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!-- 导入Spring Cloud的依赖管理 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
提示:应用zuul框架可能会遇到的一些问题
zuul.prefix不起作用,总是报404,需要安装yaml依赖包,可以见上面pom.xml的内容,加入下面的依赖包即可解决,详细解决方案也可以见www.cnblogs.com/achengmu/p/… ,我是通过这个网站解决的
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
</dependency>