博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringCloud之服务注册与发现Eureka(一)
阅读量:4957 次
发布时间:2019-06-12

本文共 7716 字,大约阅读时间需要 25 分钟。

Eureka是Spring Cloud Netflix微服务套件中的一部分,可以与Springboot构建的微服务很容易的整合起来。

Eureka包含了服务器端和客户端组件。服务器端,也被称作是服务注册中心,用于提供服务的注册与发现。Eureka支持高可用的配置,当集群中有分片出现故障时,Eureka就会转入自动保护模式,它允许分片故障期间继续提供服务的发现和注册,当故障分片恢复正常时,集群中其他分片会把他们的状态再次同步回来。
客户端组件包含服务消费者与服务生产者。在应用程序运行时,Eureka客户端向注册中心注册自身提供的服务并周期性的发送心跳来更新它的服务租约。同时也可以从服务端查询当前注册的服务信息并把他们缓存到本地并周期性的刷新服务状态。

搭建空的maven工程,以后把其它模块都放入下面

创建完成后界面如下:

可以删除src目录,因为这个工程只是为了放置springcloud的其它模块。

搭建服务注册中心服务注册中心 (eureka-server)

Eureka Server是基于springboot的,只要启动一个springboot就可以了。start.spring.io提供了一系列启动模板。创建module,选择Spring initializer.:

 

 

设置artifactId值为eureka-server

 

加入Eureka Server组件

创建完成后目录如下

自动生成的pom.xml文件

4.0.0
com.xuan
eureka-server
0.0.1-SNAPSHOT
jar
eureka-server
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
2.0.3.RELEASE
UTF-8
UTF-8
1.8
Finchley.RELEASE
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin

修改启动类EurekaServerApplication.java,添加@EnableEurekaServer

package com.xuan.eurekaserver;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@EnableEurekaServer@SpringBootApplicationpublic class EurekaServerApplication {    public static void main(String[] args) {        SpringApplication.run(EurekaServerApplication.class, args);    }}

在默认情况下,服务注册中心也会把自己当做是一个服务,将自己注册进服务注册中心,所以我们可以通过配置来禁用他的客户端注册行为,修改application.properties文件

spring.application.name=eureka-server#服务注册中心端口号server.port=8080#服务注册中心实例的主机名eureka.instance.hostname=localhost#是否向服务注册中心注册自己eureka.client.register-with-eureka=false#是否检索服务eureka.client.fetch-registry=false#服务注册中心的配置内容,指定服务注册中心的位置eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

启动应用,并访问http://localhost:8080/即可看到Eureka信息面板,如下:

从上图看到,在"Instances currently registered with Eureka"信息中,没有一个实例,说明目前还没有服务注册。接下来创建一个服务提供者eureka-client进行注册测试。

创建并注册服务提供者 Eureka Client

 创建方式如eureka-server模块类似;在选择组件的时候需要选择对应的组件

注意要选择Web组件或者其它能够持久运行的。不然会注册失败

 

创建后目录如下

生成的pom.xml文件

4.0.0
com.xuan
eureka-client
0.0.1-SNAPSHOT
jar
eureka-client
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
2.0.3.RELEASE
UTF-8
UTF-8
1.8
Finchley.RELEASE
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin

启动类EurekaClientApplication.java添加@EnableDiscoveryClient注解以实现Eureka中的DiscoveryClient实现。

package com.xuan.eurekaclient;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@EnableEurekaClient@SpringBootApplicationpublic class EurekaClientApplication {    public static void main(String[] args) {        SpringApplication.run(EurekaClientApplication.class, args);    }}

 

@EnableEurekaClient和@EnableDiscoveryClient的区别

spring cloud中discovery service有许多种实现(eureka、consul、zookeeper等等),@EnableDiscoveryClient基于spring-cloud-commons,@EnableEurekaClient基于spring-cloud-netflix。

就是如果选用的注册中心是eureka,那么就推荐@EnableEurekaClient,如果是其他的注册中心,那么推荐使用@EnableDiscoveryClient。

 

修改配置文件application.properties

spring.application.name=eureka-clientserver.port=8090eureka.client.serviceUrl.defaultZone=http://localhost:8080/eureka/

 测试是否能够注册

先启动:eureka-server

 

然后启动eureka-client

 

发现多了一个EUREKA-CLIENT,说明注册成功了

 

其它问题:

运行一段时间后,在http://localhost:8080/出现

停止eureka-client后也没有删除节点。

原因参考:

https://www.cnblogs.com/breath-taking/articles/7940364.html

http://jadyer.cn/2017/01/17/springcloud-eureka-advance

 

自我保护模式打开时,已关停节点是会一直显示在 Eureka 首页的

关闭自我保护模式后,由于其默认的心跳周期比较长等原因,要过一会儿才会发现已关停节点被自动踢出了

若想尽快的及时踢出,那就只有修改默认的心跳周期参数了

注册中心eureka-server的配置文件application.properties中修改为

spring.application.name=eureka-server#服务注册中心端口号server.port=8080#服务注册中心实例的主机名eureka.instance.hostname=localhost#关闭自我保护eureka.server.enableSelfPreservation=false# 续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)eureka.server.eviction-interval-timer-in-ms: 1000#是否向服务注册中心注册自己eureka.client.register-with-eureka=false#是否检索服务eureka.client.fetch-registry=false#服务注册中心的配置内容,指定服务注册中心的位置eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

Eureka客户端eureka-client的配置文件application.properties中修改为

spring.application.name=eureka-clientserver.port=8090# 心跳时间,即服务续约间隔时间(缺省为30s)eureka.instance.lease-renewal-interval-in-seconds: 5# 发呆时间,即服务续约到期时间(缺省为90s)eureka.instance.lease-expiration-duration-in-seconds: 15# 开启健康检查(依赖spring-boot-starter-actuator)eureka.client.healthcheck.enabled:trueeureka.client.serviceUrl.defaultZone=http://localhost:8080/eureka/

eureka-client的pom.xml增加

org.springframework.boot
spring-boot-starter-actuator

修改后,关闭eureka-client,注册中心就会很快删除节点

 源码下载地址:https://gitee.com/xuantest/springcloud/tree/master

 

转载于:https://www.cnblogs.com/grasp/p/9258811.html

你可能感兴趣的文章
如何组建和管理测试团队
查看>>
理论相关概念原理
查看>>
本地存储
查看>>
MP3的播放与停止
查看>>
两个周末,两个湖
查看>>
开发环境搭建
查看>>
入门GTD时间管理系统必读
查看>>
Codeforces Round #367 (Div. 2) Vasiliy's Multiset 异或字典树带删除模板
查看>>
牛客(59)按之字形顺序打印二叉树
查看>>
JavaScript 图表库 xCharts
查看>>
随笔 javascript-抽象工厂模式
查看>>
机器学习----人脸对齐的算法-ASM.AAM..CLM.SDM
查看>>
Android项目的目录结构
查看>>
spring-cloud服务器雪崩效应
查看>>
C++中“引用”的底层实现
查看>>
ZOJ 1602. Multiplication Puzzle (DP)
查看>>
Spring Cloud分布式微服务云架构集成项目
查看>>
【Android学习专题】控件组件篇:Dialog汇总
查看>>
Dynamic Signals and Slots
查看>>
jquery datatable 参数
查看>>