目录
一、Eureka服务端配置
-
1、服务端启动类上的注解:@EnableEurekaServer
-
2、yml配置
server:
port: 8761
spring:
application:
name: eureka-server
eureka:
server:
# eureka的自我保护机制,默认 true
enable-self-preservation: false
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:8761/eureka/
- 3、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 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.5.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.qiuyu</groupId>
<artifactId>eureka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka</name>
<description>eureka server for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>2020.0.3</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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</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>
- 4、启动
二、服务端常用操作
2.1 查看服务实例信息
查看服务实例信息。格式如下
/eureka/apps/{appName}
举例如下:
方法 GET 接口
http://localhost:8761/eureka/apps/SERVICE-PRODVIDER1
结果为:
SERVICE-PRODVIDER1 ## 服务名字192.168.0.106:service-prodvider1:8762 ## 实例ID192.168.0.106SERVICE-PRODVIDER1192.168.0.106UPUNKNOWN87624431… |
---|
2.2 下线操作
2.2.1 客户端直接停止服务
1、下线
这种方式没有办法立刻让注册中心感知到,需要注册中心等待某一时间没有收到心跳之后,才将这个服务从注册列表中移除。
2、恢复上线
此种方式下对应上线操作,就是重新部署。
2.2.2 客户端通知Eureka下线
1、 下线
使用actuator由客户端发起下线。调用客户端actuator提供的/shutdown/接口。执行完此操作之后,不仅停止了服务,还从eureka下线了。
(1)在项目中引用actuator:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
(2)配置文件中添加
#启用shutdownendpoints.shutdown.enabled=true#不进行密码验证(线上环境应该设置为true)management.security.enabled=false |
---|
(3)通过***POST方式***执行实例的http://localhost:8765/shutdown。在postman执行结果如下:
2、恢复上线
重新部署服务
2.2.3 Eureka的delete操作
1、下线
delete格式为:
方法:DELETE 接口:
/eureka/apps/{appName}/{instanceID}
参数中appName和instaceId可以由查看服务实例信息接口获取,也可以通过erueka admin获取,如下
举例,通过postman以delete方法访问http://localhost:8761/eureka/apps/SERVICE-PRODVIDER1/192.168.0.106:service-prodvider1:8762。如下
注意:***Eureka客户端每隔一段时间(默认30秒)会发送一次心跳到注册中心。在通过delte方式下线一个服务时,如果没有停掉的该服务,那么该服务很快就又会注册到Eureka。***所以在使用这种方式时,可以先kill掉服务,然后再执行delete操作,从注册中心移除改服务。
2、恢复上线
在此种方式下就是重新部署服务就可以让服务重新上线。
2.2.4 设置Eureka的服务实例状态
有时候我们下线服务实例之后,*需要在不重新部署服务实例的情况下,重新上线服务实例*。此时就使用这种方式。
1、下线
接口方式如下
方法:PUT 接口:
/eureka/apps/{appName}/{instanceId}/status?value=OUT_OF_SERVICE
举例,通过postman使用 PUT方法 访问 http://localhost:8761/eureka/apps/SERVICE-PRODVIDER1/192.168.0.106:service-prodvider1:8762/status?value=OUT_OF_SERVICE,如下:
执行结果如下图,改实例状态变为OUT_OF_SERVICE
2、 恢复上线
接口方式如下:
|方法: DELETE 接口: /eureka/apps/{appName}/{instanceId}/status?value=UP
举例,通过postman使用 DELETE方法 访问
http://localhost:8761/eureka/apps/SERVICE-PRODVIDER1/192.168.0.106:service-prodvider1:8762/status?value=UP
执行后的结果为,服务实例重新上线,状态为”UP”
2.2.5 一个部署流程
比较优雅的一种服务部署流程方式有:
**方式1 :**可以通过“设置Eureka的服务实例状态”下线机器;执行部署脚本:kill 服务、重新部署服务;再通过“设置Eureka的服务实例状态”上线此实例。
方式2: 先调用实例的/shutdown接口,然后重新部署该服务
三、客户端
-
客户端yml配置
参考官网:https://cloud.spring.io/spring-cloud-static/spring-cloud-netflix/2.1.0.RELEASE/single/spring-cloud-netflix.html#_registering_with_eureka
server:
port: 8700
spring:
application:
name: eureka-client
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/ # eureka server的地址
- 配置 pom.xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
-
启动类加注解
@SpringBootApplication @EnableEurekaClient public class EurekaClientApplication { public static void main(String[] args) { SpringApplication.run(EurekaClientApplication.class, args); } }
注册中心客户端 注解 @EnableEurekaClient 与 @EnableDiscoveryClient 区别
@EnableEurekaClilent 与 @EnableDiscoveryClient 作用相同。
区别:
注册中心的实现方式有很多种,
如果是采用的 Eureka服务的话,那客户端直接使用@EnableEurekaClient注解和@EnableDiscoveryClient注解都可以。
如果是采用的 zookeeper或者其它服务时,那客户端就不能采用@EnableEurekaClient注解了,而是要使用@EnableDiscoveryClient注解。
所以在实际的开发中我们推荐使用@EnableDiscoveryClient注解,这样当我们更换注册中心实现时,就不用修改代码了。