简介
Spring Cloud是目前用于开发微服务的主流框架之一,我们都知道在微服务架构中最为基础、核心的模块,就是服务注册与发现。
在Spring Cloud里我们可以使用它的Eureka模块来实现服务注册与发现,Spring Cloud Eureka是基于Netflix Eureka做了二次封装,它主要负责完成各个微服务实例的自动化注册和发现功能。
Eureka包含两个组件:Eureka Server和Eureka Client
Eureka Server提供服务注册服务,各个节点启动后,会在EurekaServer中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到
EurekaClient是一个Java客户端,用于简化Eureka Server的交互,客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)
构建与部署
eureka server
1、单点部署如果是idea,可以直接直接new project >> springinitializr >> cloud discovery按着步骤操作,就可以搭建一个单点eureka server
2、集群部署一般生产环境都是三个或以上节点,集群中的每个节点也是把自己当一个提供者相互注册application.yml配置如下
server:
port: 8761
spring:
application:
name: eureka
profiles:
active: dev
security:
basic:
enabled: false # 启用身份认证
user:
name: lipeng # 定义用户名
password: lipeng. # 定义密码
---
spring:
profiles: prd-1
eureka:
instance:
hostname: register1
client:
fetch-registry: true
register-with-eureka: true
serviceUrl:
defaultZone: http://lipeng:[email protected]:8761/eureka/,http://lipeng:[email protected]:8761/eureka/,http://lipeng:[email protected]:8761/eureka/
instance:
prefer-ip-address: true
ip-address: 200.200.0.166
server: #配置属性,但由于 Eureka 自我保护模式以及心跳周期长的原因,经常会遇到 Eureka Server 不剔除已关停的节点的问题
enable-self-preservation: false
eviction-interval-timer-in-ms: 5000
---
spring:
profiles: prd-2
eureka:
instance:
hostname: register2
client:
fetch-registry: true
register-with-eureka: true
serviceUrl:
defaultZone: http://lipeng:[email protected]:8761/eureka/,http://lipeng:[email protected]:8761/eureka/,http://lipeng:[email protected]:8761/eureka/
instance:
prefer-ip-address: true
ip-address: 200.200.0.171
server: #配置属性,但由于 Eureka 自我保护模式以及心跳周期长的原因,经常会遇到 Eureka Server 不剔除已关停的节点的问题
enable-self-preservation: false
eviction-interval-timer-in-ms: 5000
---
spring:
profiles: prd-3
eureka:
instance:
hostname: register3
client:
fetch-registry: true
register-with-eureka: true
serviceUrl:
defaultZone: http://lipeng:[email protected]:8761/eureka/,http://lipeng:[email protected]:8761/eureka/,http://lipeng:[email protected]:8761/eureka/
instance:
prefer-ip-address: true
ip-address: 200.200.0.167
server: #配置属性,但由于 Eureka 自我保护模式以及心跳周期长的原因,经常会遇到 Eureka Server 不剔除已关停的节点的问题
enable-self-preservation: false
eviction-interval-timer-in-ms: 5000
打包后部署时在启动命令中增加 --spring.profile.active=prd-1/prd-2/prd-3启动后如下:这样才算部署成功,如果上面两个节点是在unavailable-replicas中则是没有成功的。
k8s中集成eureka
一般是不建议在k8s中使用eureka,不过有时候如果需要的话,则部署时最好填写域名。设置该变量就行
eureka client
这个就比较简单了,网上有很多例子pom依赖
<!--注册中心-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
增加注解yml配置
spring:
profiles: dev
eureka:
instance:
prefer-ip-address: true
lease-renewal-interval-in-seconds: 5
lease-expiration-duration-in-seconds: 20
hostname: ${spring.application.name}
client:
serviceUrl:
defaultZone: http://lipeng:[email protected]:8761/eureka/,http://lipeng:[email protected]:8761/eureka/,http://lipeng:[email protected]:8761/eureka/
registry-fetch-interval-seconds: 10
实际上defaultZone只需要配置一个节点,其他节点也会自动同步。启动服务就可以看到
详细代码见:https://gitee.com/lpxs/lp-springcloud.git,上面的是配置中心的部署demo。