微服务SpringCloud:注册中心Eureka的学习与使用

一、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执行结果如下:

39153650

2、恢复上线

重新部署服务

2.2.3 Eureka的delete操作

1、下线

delete格式为:

方法:DELETE 接口:
/eureka/apps/{appName}/{instanceID}

参数中appName和instaceId可以由查看服务实例信息接口获取,也可以通过erueka admin获取,如下

WX20190625-075302

举例,通过postman以delete方法访问http://localhost:8761/eureka/apps/SERVICE-PRODVIDER1/192.168.0.106:service-prodvider1:8762。如下

WX20190625-074502

注意:***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,如下:

WX20190625-080552

执行结果如下图,改实例状态变为OUT_OF_SERVICE

WX20190625-080411

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

WX20190625-081057

执行后的结果为,服务实例重新上线,状态为”UP”

WX20190625-081147

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注解,这样当我们更换注册中心实现时,就不用修改代码了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秃头才会变强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值