Eureka服务治理

Posted dw3306

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Eureka服务治理相关的知识,希望对你有一定的参考价值。

Eureka服务治理

 

什么是服务治理?

 

SpringCloud封装了Netflit公司开发的Eureka模块来实现服务治理;

 

在传统的rpc远程调用框架中,管理每个服务与服务之间的依赖关系比较复杂,所以需要使用服务治理,管理服务与服务之间的依赖关系,可以实现服务调用、负载均衡、容错、实现服务的发现与注册

 

什么是服务的注册与发现?

 

     Eureka采用了CS的设计架构,Eureka Server 作为服务注册的服务器,他是服务的注册中心。而系统中的其他微服务,使用Eureka的客户端连接到Eureka Server并维持心跳连接,这样系统的维护人员就可以通过Eureka Server来监控系统中的各个服务是否运行正常。

 

     在服务注册与发现中,有一个注册中心。当服务器启动的时候,会把自己的服务器信息 比如服务地址、通讯地址等以别名的方式注册到注册中心上,另一方(消费|服务提供者),以改别名的方式去注册中心上获取到实际的服务通讯地址,然后在实现本地RPC调用RPC远端调用,框架的核心思想:在于注册中心,因为使用注册中心管理每一个服务与服务的依赖关系(服务治概念),在任何的rpc远程框架中,都会有一个注册中心(存放服务地址信息(接口地址))

 

技术图片

 

Eureka包含两个组件:Eureka Server 和 Eureka Client

 

 

1Eureka Server: 提供服务注册服务(@EnableEurekaServer加在启动类上)

 

 各个微服务节点通过配置启动后,会在EurekaServer中进行注册,这样EurekaServer中的服务注册表中将会存储所有服务节点的信息,服务节点的信息可以直接在界面中直观看到。

maven依赖

EurekaServer以前的老版本使用(2018)
<dependency>
   <groupId>org.springframework.cloud</groupId>   
   <artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>

Eureka现在的新版本Server (当前使用2020.2)
<dependency>
   <groupId>org.springframework.cloud<groupId>   
   <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

 

yml配置:

server:
  port: 7001
eureka: instance: # eureka 服务端的实例名称(服务器Ip) hostname: eureka7001.com client: # false 表示不向注册中心注册自己 register-with-eureka: false #false 表示自己端就是注册中心,我的职责就是维护实例,并不需要去检索服务 fetch-registry: false service-url: # 设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址 # 1: 单机就是自己 defaultZone: http://eureka7001.com:7001/eureka/ # 集群就是指向其他的Eureka # defaultZone: http://eureka7002.com:7002/eureka/ # @@@@【关闭自我保护机制】@@@########################################################### # server: # # 关闭自我保护机制,保证不可用服务及时被踢出 # enable-self-preservation: false # # 服务不可用时2秒提出 # eviction-interval-timer-in-ms: 2000

 

2Eureka Client 通过注册中心进行访问(@EnableEurekaClient加在启动类上)

        是一个java客户端,用于简化Eureka Server 的交互,客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器,在应用启动后,将会向Eureka Server发送心跳(默认周期30秒)。如果Eureka Server 在多个心跳周期内没有接受到某个节点的心跳, EurekaServer将会从服务注册表中移除节点(默认90秒)

Maven依赖:
<!--eureka client-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

Yml配置


server:
  port: 8001
eureka:
  client:
  # 表示是否将自己注册进Eureka Server 默认为true
   register-with-eureka: true
   # 是否从EurekaServer 抓取已有的注册信息,默认为true。单节点为所谓,集群必须设置为true才能配合ribbon使用负载均衡
   fetchRegistry: true
   # 注册中心地址
   service-url:
   # 单机版注册地址
#     defaultZone: http://localhost:7001/eureka
  # 集群版
     defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
     # 实例ID
  instance:
    instance-id: payment8001
    # 访问路径可以显示IP地址
    prefer-ip-address: true
    # Eureka 客户端向服务端发送心跳的时间间隔,单位为秒(默认是30秒)
   # lease-renewal-interval-in-seconds: 1
    # Eureka服务端在收到最后一次心跳后的等待时间上线,单位为秒(默认是90秒),超时将剔除服务
  #  lease-expiration-duration-in-seconds: 2

spring:
  application:
    name: cloud-payment-service

微服务RPC远程调用的最核心的是高可用

所以搭建集群的Eureka注册中心,实现负载均衡加容错。

EurekaServer集群原理:互相注册,相互守望

技术图片

 

 单机集群配置:

 找到C:WindowsSystem32driversetchosts文件:

修改映射配置加入hosts文件中:

        127.0.0.1   eureka7001.com

        127.0.0.1   eureka7002.com

集群修改yml注册中心地址:7001指向7002,  7002指向7001

server:
  port: 7001

eureka:
  instance:
  # eureka 服务端的实例名称
    hostname: eureka7001.com
  client:
     # false 表示不向注册中心注册自己
    register-with-eureka: false
    #false 表示自己端就是注册中心,我的职责就是维护实例,并不需要去检索服务
    fetch-registry: false
    service-url:
    # 设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址
      defaultZone: http://eureka7002.com:7002/eureka/
server:
  port: 7002


eureka:
  instance:
  # eureka 服务端的实例名称
    hostname: eureka7002.com
  client:
     # false 表示不向注册中心注册自己
    register-with-eureka: false
    #false 表示自己端就是注册中心,我的职责就是维护实例,并不需要去检索服务
    fetch-registry: false
    service-url:
    # 设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址
      defaultZone: http://eureka7001.com:7001/eureka/

 

项目启动注意:

应该先启动服务注册中心(7001、7002),然后再去启动服务提供者与服务消费者

 

通过接口显示注册中心的注册信息:

启动类上添加: @EnableDiscoveryClient

 

@Resource
private DiscoveryClient discoveryClient;

@GetMapping("payment/discovery")
public Object discovery(){
    List<String> services = discoveryClient.getServices();
    for (String service : services) {
        log.info("********service: " + service);
    }

    List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
    for (ServiceInstance instance : instances) {
        log.info(instance.getServiceId()+ "	" + instance.getHost()+ "	" + instance.getPort()
         + "	" + instance.getUri());
    }
    return this.discoveryClient;
}

 

 

 

以上是关于Eureka服务治理的主要内容,如果未能解决你的问题,请参考以下文章

服务治理:Spring Cloud Eureka

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端Eureka 服务信息Eureka 发现管理Eureka 安全配置Eureka-HA(高可用) 机制Eur(代码片段

服务治理-Spring Cloud Eureka

微服务之SpringCloud实战:SpringCloud Eureka服务治理

SpringCloud:如何使用Eureka进行服务治理?

第三章 服务治理:Spring Cloud Eureka