首页 > 其他分享 >Eureka

Eureka

时间:2023-05-29 11:23:47浏览次数:19  
标签:服务 ip eureka 注册 Eureka server port

1. SpringCloud常用组件表

  • 服务的注册和发现。(eureka,nacos,consu1)
  • 服务的负载均衡。(ribbon,dubbo)
  • 服务的相互调用。(openFeign,dubbo)
  • 服务的容错。(hystrix,sentinel)
  • 服务网关。(gateway,zuul)
  • 服务配置的统一管理。(config-server,nacos,apollo)
  • 服务消息总线。(bus)
    服务安全组件。(security,oauth2.0)
  • 服务监控。(admin)(jvm)
  • 链路追踪。(sleuth+zipkin)

2.落地实现

目前开发中常用的落地实现有三种:

3.Eureka

3.1 CAP原理

CAP原则又称CAP定理,指的是在一个分布式系统中,

  • 一致性(Consistency)
  • 可用性(Availability)
  • 分区容错性(Partition tolerancQ)(这个特性是不可避免的)CAP原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。

image-20230225121014337

3.2 快速入门

image-20230225121459188

3.3 Eureka Server

3.3.1如何实现一个注册服务中心

  • 需要解决的问题

image-20230302102016225

3.3.1 配置文件

server:
  port: 8761 #默认端口

spring:
  application:
    name: eureka-server #应用名称

eureka: # eureka的配置分为三类 server  client  实例的  eureka-server既是服务端又是客户端
  server:
    eviction-interval-timer-in-ms: 10000 # 服务端间隔多少毫秒做定期删除的操作
    renewal-percent-threshold: 0.85 # 续约百分比 超过85%的应用没有和你续约 那么eureka会保护服务 不会剔除任何一个
  instance: # 实例的配置
    instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port}   # 主机名称 : 应用名称 : 端口号
    hostname: localhost  # 主机名称 或者服务的ip
    prefer-ip-address: true # 以ip的形式显示具体的服务信息
    lease-renewal-interval-in-seconds: 5  # 服务实例的续约的时间间隔

3.3.2 启动注解

@EnableEurekaServer // 开启Eureka注册中心

3.4 Eureka Client

3.4.1 配置文件

server:
  port: 8081

spring:
  application:
    name: eureka-client-a

# 注册的含义是什么? 就是将自己的一些信息(什么信息ip port...) 发送过去 (发到哪里)
eureka:
  client: # 客户端的相关配置
    service-url: # 指定注册的地址
      defaultZone: http://localhost:8761/eureka
    register-with-eureka: true  # 可以不往eureka-server注册
    fetch-registry: true  # 应用是否去拉去服务列表到本地
    registry-fetch-interval-seconds: 10  # 为了缓解服务列表的脏读问题 时间越短脏读越少  性能消耗大
  instance:
    hostname: localhost # 应用的主机名称 最好写主机ip
    instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port}
    prefer-ip-address: true # 显示ip
    lease-renewal-interval-in-seconds: 10 # 示例续约的时间

3.4.2 启动注解

@EnableEurekaClient

3.5 web配置页面

image-20230302080732958

  • 一个应用可以有多个实例,每个实例id唯一。实例id组成为三部分

3.6 集群设置

3.6.1 Eureka Server 集群设置

  • 配置文件

      client:
        service-url:
          defaultZone: http://peer1:8761/eureka,http://peer3:8763/eureka,http://peer2:8762/eureka
    

3.7 Eureka 概念的理解

3.7.1 服务的注册

当项目启动时(

eureka 的客户端),就会向 eureka-server 发送自己的元数据(原始数据)

(运行的 ip,端口 port,健康的状态监控等,因为使用的是 http/ResuFul 请求风格),

eureka-server 会在自己内部保留这些元数据(内存中)。(有一个服务列表)(

restful 风

格,以 http 动词的请求方式,完成对 url 资源的操作)

3.7.2 服务的续约

项目启动成功了,除了向 eureka-server 注册自己成功,还会定时的向 eureka-server 汇

报自己,心跳,表示自己还活着。(修改一个时间)

3.7.3 服务的下线(主动下线)

当项目关闭时,会给 eureka-server 报告,说明自己要下机了。

3.7.4 服务的剔除(被动下线,主动剔除)

当项目超过了指定时间没有向 eureka-server 汇报自己,那么 eureka-server 就会认为此

节点死掉了,会把它剔除掉,也不会放流量和请求到此节点了。

7.2.3 服务注册总结

重要的类:

DiscoveryClient 里面的 register()方法完后注册的总体构造

AbstractJerseyEurekaHttpClient 里面的 register()方法具体发送注册请求(

post)

InstanceRegistry 里面 register()方法接受客户端的注册请求

PeerAwareInstanceRegistryImpl 里面调用父类的 register()方法实现注册

AbstractInstanceRegistry 里面的 register()方法完成具体的注册保留数据到 map 集合

保存服务实例数据的集合:

第一个 key 是应用名称(全大写) spring.application.name

Value 中的 key 是应用的实例 id

eureka.instance.instance-id

Value 中的 value 是 具体的服务节点信息

private final ConcurrentHashMap<String, Map<String,Lease<InstanceInfo>>> registry
= new ConcurrentHashMap<String, Map<String,Lease<InstanceInfo>>>(); 

3.8 服务发现

@Autowired
private DiscoveryClient discoveryClient;

@GetMapping("test")
    public String doDiscovery(String serviceName){
        // 这就是服务发现  通过服务的应用名 找到服务的具体信息
        List<ServiceInstance> instances = discoveryClient.getInstances(serviceName);
        instances.forEach(System.out::println);
        ServiceInstance serviceInstance = instances.get(0);
        String ip = serviceInstance.getHost();
        int port = serviceInstance.getPort();
        System.out.println(ip+":"+port);
        // 这里去找b的ip和port
        return instances.get(0).toString();
    }

标签:服务,ip,eureka,注册,Eureka,server,port
From: https://www.cnblogs.com/firsthelloworld/p/17439920.html

相关文章