0
点赞
收藏
分享

微信扫一扫

SpringCloud Eureka注册服务中心

sin信仰 2022-04-21 阅读 77
java

服务注册中⼼本质上是为了解耦服务提供者和服务消费者。

一,服务注册中⼼⼀般原理

在这里插入图片描述

1)服务提供者启动
2)服务提供者将相关服务信息主动注册到注册中⼼
3)服务消费者获取服务注册信息:
pull模式:服务消费者可以主动拉取可⽤的服务提供者清单
push模式:服务消费者订阅服务(当服务提供者有变化时,注册中⼼也会主动推送
更新后的服务清单给消费者
4)服务消费者直接调⽤服务提供者
另外,注册中⼼也需要完成服务提供者的健康监控,当发现服务提供者失效时需要及时剔除;

二,服务注册中心组件Eureka基础架构

在这里插入图片描述
在这里插入图片描述
Eureka 包含两个组件:Eureka Server 和 Eureka Client,Eureka Client是⼀个Java客户端,⽤于简化与Eureka Server的交互;Eureka Server提供服务发现的能⼒,各个微服务启动时,会通过Eureka Client向Eureka Server 进⾏注册⾃⼰的信息(例如⽹络信息),Eureka Server会存储该服务的信息;

1)图中us-east-1c、us-east-1d,us-east-1e代表不同的区也就是不同的机房。
2)图中每⼀个Eureka Server都是⼀个集群。
3)图中Application Service作为服务提供者向Eureka Server中注册服务,Eureka Server接受到注册事件会在集群和分区中进⾏数据同步,Application Client作为消费端(服务消费者)可以从Eureka Server中获取到服务注册信息,进⾏服务调⽤。
4)微服务启动后,会周期性地向Eureka Server发送⼼跳(默认周期为30秒)以续约⾃⼰的信息
5)Eureka Server在⼀定时间内没有接收到某个微服务节点的⼼跳,EurekaServer将会注销该微服务节点(默认90秒)。
6)每个Eureka Server同时也是Eureka Client,多个Eureka Server之间通过复制的⽅式完成服务注册列表的同步。
7)Eureka Client会缓存Eureka Server中的信息。即使所有的Eureka Server节点都宕掉,服务消费者依然可以使⽤缓存中的信息找到服务提供者,Eureka通过⼼跳检测、健康检查和客户端缓存等机制,提⾼系统的灵活性、可伸缩性和可⽤性。

三,Eureka服务端代码实现

1,导入pom依赖

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

2,配置application.yml配置文件

# Eureka server服务端⼝
server:
  port: 8761

spring:
  application:
    # 应⽤名称,会在Eureka中作为服务的id标识
    name: edu-eureka-boot

eureka:
  instance:
    hostname: localhost
  client:
    #⾃⼰就是服务不需要从Eureka Server获取服务信息,默认为true,置为false
    fetch-registry: false
    # ⾃⼰就是服务不需要注册⾃⼰
    register-with-eureka: false
    # 客户端与EurekaServer交互的地址,如果是集群,也需要写其它Server的地址
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

3,启动类

@SpringBootApplication
// 声明本项⽬是⼀个Eureka服务
@EnableEurekaServer
public class EurekaServer {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServer.class,args);
    }
}

执⾏启动类LagouCloudEurekaServerApplication的main函数
访问http://127.0.0.1:8761,如果看到如下⻚⾯(Eureka注册中⼼后台),则表明EurekaServer发布成功
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

经验:建议⽣产环境打开⾃我保护机制

eureka web页面右上部实时展示Renews threshold和Renews (last min)
Renews threshold:续约最小阈值。
Renews (last min):最后一分钟续约的数量。
当Renews (last min) ≤ Renews threshold时就会触发自我保护机制。

四,Eureka客户端

服务提供者(也是Eureka客户端)要向EurekaServer注册服务,并完成服务续约等
⼯作,服务注册详解(服务提供者):
1)当我们导⼊了eureka-client依赖坐标,配置Eureka服务注册中⼼地址
2)服务在启动时会向注册中⼼发起注册请求,携带服务元数据信息
3)Eureka注册中⼼会把服务的信息保存在Map中。
在这里插入图片描述
在这里插入图片描述
1,pom文件引入依赖

        <!--eureka客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        
        <!--获取配置中心配置-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-client</artifactId>
        </dependency>

2,配置application.yml

server:
  port: 8001

spring:
  application:
    name: edu-ad-boot
  cloud:
    config:
      uri: http://localhost:8090
      label: master
      profile: dev
      name: lagou-edu-ad
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:8761/eureka/
  instance:
    # 注册服务的时候使用ip地址,ip地址从host里面找
    prefer-ip-address: true
    # 翻译过来就是“主机名:服务名称:服务端口”。当我们在 Eureka 的 Web 控制台查看服务注册信息的时候,就是这样的一个格式:
    instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}

3,配置启动类

@SpringBootApplication
# 将服务注册到eureka server注册中心 
# @EnableDiscoveryClient@EnableEurekaClient共同点就是:都是能够让注册中心能够发现,扫描到改服务。
# 不同点:@EnableEurekaClient只适用于Eureka作为注册中心,@EnableDiscoveryClient 可以是其他注册中心。
@EnableDiscoveryClient
public class LagouAdApplication {
    public static void main(String[] args) {
        SpringApplication.run(LagouAdApplication.class, args);
    }
}

4,启动后查看注册中心中是否注册成功
在这里插入图片描述

举报

相关推荐

0 条评论