SpringCloud微服务组件-注册中心eureka

SpringCloud微服务组件-注册中心eureka

一.定义

在这里插入图片描述

为了保证注册中心以及服务的高可用,他们都可以以集群的形态出现。使用注册中心不仅简化了调用关系,并且保证了服务之间的可靠调用以及服务的集群高可用。同时也符合了解耦的目的。

角色:
     eureka server:注册中心,所有的服务包括他自己都会把相关信息注册进去。这么一来,所有可用的微服务节点信息都可以在管理界面中看到。
     eureka client:注册客户端,每个微服务个体都是客户端,其实也就是一个web工程。其中服务的调用方称之为消费者(consumer),被调用方称之为服务提供者(provider)。每个微服务和eureka之间都会保持心跳,如果心跳断了,则会剔出该服务。

二.构建eureka

2.1:配置eureka服务

1.创建一个springboot工程
2.pom.xml中引入依赖

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

3.yml中配置eureka

eureka:
  instance:
#    hostname: localhost   # eureka-server实例
    hostname: eureka  # 也可以通过switchHost配置
  client:
    # 是否要把当前server注册(都行)
    register-with-eureka: false
    # 从注册中心查询检索服务实例,server的话没必要,直接false
    fetch-registry: false
    service-url:
      # 单实例配置自己的服务地址,高可用则配置其他服务的地址
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

4.在启动类上开启eureka server注解

@EnableEurekaServer     // 开启注册中心

5.重新启动打开URL访问并测试:http://eureka:port/

2.2:注册服务到eureka

1.引入eureka client依赖

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

2.配置yml

############################################################
#
# eureka client 配置
#
############################################################
eureka:
  # 自定义eureka
  server:
    hostname: eureka
    port: 7000
  client:
    # 所有微服务都必须注册到eureka中
    register-with-eureka: true
    # 从注册中心查询检索服务实例
    fetch-registry: true
    service-url:
      # 注册中心的地址,表示我当前微服务要登记户口到指定的派出所
      # defaultZone: http://${eureka.server.hostname}:${eureka.server.port}/eureka/
      #注册中心如果是集群,则在这地方多配几个地址,用逗号分隔
      defaultZone: http://eureka-cluster-7001:7001/eureka/,http://eureka-cluster-7002:7002/eureka/,http://eureka-cluster-7003:7003/eureka/

3.在启动类中开启eureka client注解

@EnableEurekaClient

4.启动用户微服务,需要注意,先启动注册中心,后启动微服务,打开注册中心查看,这个时候多了用户服务

三.常用语法

3.1 获取当前已注册服务

1.注入服务发现

// 注入服务发现,可以获得已注册的服务相关信息
@Autowired
private DiscoveryClient discoveryClient;

2.通过DiscoveryClient获得服务

String serviceId = "SERVICE-USER";
List<ServiceInstance> instanceList = discoveryClient.getInstances(serviceId);
ServiceInstance userService = instanceList.get(0);
    
String userServerUrlExecute
        = "http://" + userService.getHost() + ":" + userService.getPort() + "/user/queryByIds?userIds=" + JsonUtils.objectToJson(idSet);

3.2 关闭eureka自我保护机制

定义:一旦eureka进入了自我保护,则所有已经注册的数据将不会被剔除,也就是不会删除任何的微服务了,目前有多少就多少。

为啥会出现自我保护?
如果某个微服务不可用,eureka就收不到他的心跳,按理说eureka在一定时间后会注销这个微服务,把他从注册列表中删除。但是如果说,现在所有的微服务都是好的,但是由于分布式部署,有可能网络分区出现故障(比如网线被挖断了),导致eureka和微服务之间的通信出现问题(ping不通了),如果eureka一下子识别到有很多微服务都没有心跳,那么此时进入自我保护,那么会依旧保存这些微服务的注册信息。

eureka如此的自我保护机制就是为了是的整个微服务保证高可用,保证整个体系架构更加的稳定。

eureka的自我保护默认是开启的,当然可以关闭,需要修改配置如下:

eureka:
  server:
    enable-self-preservation: false   # 关闭eureka的自我保护功能
    eviction-interval-timer-in-ms: 5000   # 清理无效节点的时间,缩短一点,默认60s

除此之外,对于微服务发送心跳的时间间隔我们也修改一下

eureka:
  instance:
    lease-renewal-interval-in-seconds: 3      # 调整心跳时间
    lease-expiration-duration-in-seconds: 5   # eureka距离最近一次的心跳,等待剔除的时间,超过则剔除
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值