Spring-Cloud 实战之eureka

euraka是什么:

Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现,eureka里有2个组件,一个是EurekaServer(一个独立的项目) 这个是用于定位服务以实现中间层服务器的负载平衡和故障转移,Eureka Server 作为服务注册功能的服务器,它是服务注册中心。另一个便是EurekaClient(我们的微服务) 它是用于与Server交互的,可以使得交互变得非常简单:只需要通过服务标识符即可拿到服务。举个通俗的例子:Eureka Server在微服务的角色类似于公司前台,客户想访问公司的某个部门或者人,都需要去前台咨询;然后前台告诉客户,被访问对象的信息。
项目地址:springcloud+tx-lcn实践

在springcloud中的使用:

服务端依赖

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

服务端配置文件:

server:
  port: 8761
eureka:
  server:
    enable-self-preservation: false  #关闭自我保护机制
    eviction-interval-timer-in-ms: 60*1000 #设置清理间隔(单位:毫秒 默认是60*1000)
  instance:
    hostname: localhost
  client:
    registerWithEureka: false #不把自己作为一个客户端注册到自己身上
    fetchRegistry: false  #不需要从服务端获取注册信息(因为在这里自己就是服务端,而且已经禁用自己注册了)
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka

另外服务端还需在启动类上加上@EnableEurekaServer注解

@EnableEurekaServer
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class);

    }
}

客户端依赖

<dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
 </dependency>

客户端配置:

server:
  port: 9002
eureka:
  client:
    serviceUrl:
        defaultZone: http://127.0.0.1:8761/eureka  #eureka服务端提供的注册地址 参考服务端配置的这个路径
  instance:
  	
    instance-id: power-1 #此实例注册到eureka服务端的唯一的实例ID 
    prefer-ip-address: true #是否显示IP地址
    leaseRenewalIntervalInSeconds: 10 #eureka客户需要多长时间发送心跳给eureka服务器,表明它仍然活着,默认为30(与下面配置的单位都是秒)
    leaseExpirationDurationInSeconds: 30 #Eureka服务器在接收到实例的最后一次发出的心跳后,需要等待多久才可以将此实例删除,默认为90秒

spring:
  application:
    name: web #此实例注册到eureka服务端的name 

另外还需在客户端启动类上添加 @EnableEurekaClient 注解,标注其为一个Eureka客户端。
这样一个基础的eureka就搭建好了,访问http://127.0.0.1:8761/,结果如图:
在这里插入图片描述

Eureka集群

集群原理:
服务启动后向Eureka注册,Eureka Server会将注册信息向其他Eureka Server进行同步,当服务消费者要调用服务提供者,则向服务注册中心获取服务提供者地址,然后会将服务提供者地址缓存在本地,下次再调用时,则直接从本地缓存中取,完成一次调用
集群配置:
将原有eureka的defaultZone改为http://127.0.0.1:8762/eureka ,并新增 一个eureka服务,配置如下

server:
   port: 8762
eureka:
   instance:
       prefer-ip-address: true
       instance-id: ${spring.cloud.client.ip-address}:${server.port}
       hostname: ${spring.cloud.client.ip-address}
   client:
       service-url:
           defaultZone: http://127.0.0.1:8761/eureka  ##向http://127.0.0.1:8761/eureka 注册自己
       register-with-eureka: false
   server:
       enable-self-preservation: false
       eviction-interval-timer-in-ms: 5000
       response-cache-update-interval-ms: 3000

将项目启动之后会看到如下效果:
在这里插入图片描述
相应的,客户端也需要添加配置:
client:
serviceUrl:
defaultZone: http://127.0.0.1:8761/eureka,http://127.0.0.1:8762/eureka

Eureka总结:

Eureka在设计的时候遵循的是AP原则,即可用性。Eureka各个节点(服务)是平等的, 没有主从之分,几个节点down掉不会影响正常工作,剩余的节点(服务) 依然可以提供注册与查询服务,而Eureka的客户端在向某个Eureka注册或发现连接失败,则会自动切换到其他节点,也就是说,只要有一台Eureka还在,就能注册可用(保证可用性), 只不过查询到的信息不是最新的(不保证强一致),除此之外,Eureka还有自我保护机制,如果在15分钟内超过85%节点都没有正常心跳,那么eureka就认为客户端与注册中心出现了网络故障,此时会出现一下情况:
1: Eureka 不再从注册列表中移除因为长时间没有收到心跳而过期的服务。
2:Eureka 仍然能够接收新服务的注册和查询请求,但是不会被同步到其它节点上(即保证当前节点可用)
3: 当网络稳定后,当前实例新的注册信息会被同步到其它节点中

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值