springcloud eureka

Eureka是一个用于服务注册和发现的组件,最开始主要应用于亚马逊公司旗下的云计算服务平台AWS,Eureka分为Eureka Server和 Eureka Client, Eureka Server为 Eureka服务注册中心,Eureka Client为Eureka客户端。
Eureka的基本结构:
1:Register Service:服务注册中心,它是一个Eureka Server,提供服务注册和发现的功能。
2:Provider Service:服务提供者,它是一个Eureka Client,提供服务。
3:Consumer Service:服务消费者,它是一个Eureka Client,消费服务。
原理:
首先需要一个服务注册中心Eureka Server,服务提供者 Eureka Client向服务注册中心Eureka Server注册,将自己的信息(比如说服务名和服务的IP地址等)通过REST API的形式提交给服务注册中心Eureka Server。同样,服务消费者Eureka Client也向服务注册中心Eureka Server注册,同事服务消费者获取一份服务注册列表的信息,该列表包含了所有向服务注册中心Eureka Server注册的服务信息。获取服务注册列表信息之后,服务消费者就知道服务提供者的IP地址,可以通过Http远程调度来消费服务提供者的服务。
Eureka Server的实现:
首先在父项目创建一个模块为eureka server,需要引入以下pom文件,

<properties>
   <java.version>1.8</java.version>
   <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
</properties>

<dependencies>
   <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
   </dependency>
   <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>
</dependencies>

application.yml配置如下

server:
  port: ${EUREKA_PORT:8886} #服务的端口号

eureka: #eureka的配置信息
  client:
    registerWithEureka: false #是否注册自己自身
    fetchRegistry: false #是否从eureka服务器获取注册信息
    serviceUrl:
      defaultZone: http://${EUREKA_ZONE_HOST:localhost}:${EUREKA_ZONE_PORT:8886}/eureka/  #注册到注册中心
  server:
    enable-self-preservation: true #保护机制(默认90S)

spring:
  application:
    name: eureka-server #给服务起的服务名

其中port配置eureka服务器端口号。Eureka的配置属性都在开源项目spring-cloud-netflix-master中定义,registerWithEureka表示是否注册自身到eureka服务器,因为当前这个应用就是eureka服务器,没必要注册自身,所以这里是false。fetchRegistry表示是否从eureka服务器获取注册信息,同上,这里不需要。defaultZone就比较重要了,是设置eureka服务器所在的地址,查询服务和注册服务都需要依赖这个地址。
而项目启动类里面需要加入@EnableEurekaServer这个注解,可以看到只需要使用@EnableEurekaServer注解就可以让应用变为Eureka服务器,这是因为spring boot封装了Eureka Server,让你可以嵌入到应用中直接使用。(至于真正的EurekaServer是Netflix公司的开源项目,也是可以单独下载使用的。)
在默认配置中,Eureka Server在默认90s没有得到客户端的心跳,则注销该实例,但是往往因为微服务跨进程调用,网络通信往往会面临着各种问题,比如微服务状态正常,但是因为网络分区故障时,Eureka Server注销服务实例则会让大部分微服务不可用,这很危险,因为服务明明没有问题。原理是,当Eureka Server节点在短时间内丢失过多的客户端时(可能发送了网络故障),那么这个节点将进入自我保护模式,不再注销任何微服务,当网络故障回复后,该节点会自动退出自我保护模式。
Eureka Client的实现:
同样首先引入相关的pom文件

<dependency>
   <groupId>org.mybatis.spring.boot</groupId>
   <artifactId>mybatis-spring-boot-starter</artifactId>
   <version>2.0.0</version>
</dependency>
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

主要是yml文件有些变化

server:
  port: 8889

eureka:
  client:
    serviceUrl:
      defaultZone: http://${EUREKA_ZONE_HOST:localhost}:${EUREKA_ZONE_PORT:8886}/eureka/
  instance:
    prefer-ip-address: true
spring:
  application:
    name: model-prod

前面post 定义自己服务的端口号,在eureka 的配置中defaultZone需要把服务注册到注册中心的地址去,prefer-ip-address意思是在注册中心是否显示IP方式的地址,false的话就是主机名+端口号。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值