Eureka服务治理

Eureka服务治理

 

 

1、什么是服务治理?

SpringCloud 封装了Netflit公司开发的Eureka模块来实现服务治理;在传统的rpc远程调用框架中,管理每个服务与服务之间的依赖关系比较复杂,所以需要使用服务治理,管理服务与服务之间的依赖关系,可以实现服务调用、负载均衡、容错、实现服务的发现与注册。

 

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

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

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

 

3、Eureka 简介

Eureka包含两个组件:Eureka Server(eureka服务端) Eureka Client (eureka客户端)。

 

4、Eureka Server: 提供服务注册服务

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

1、maven依赖

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

2、在启动类上添加 @EnableEurekaServer 注解来启用Euerka注册中心功能

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

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

 

3、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

 4、运行完成后访问地址http://localhost:7001/可以看到Eureka注册中心的界面。

 

5Eureka Client 注册自己到 eureka server

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

1、Maven依赖:

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

2、在启动类上添加 @EnableDiscoveryClient 注解表明是一个Eureka客户端

@EnableDiscoveryClient
@SpringBootApplication
public class EurekaClientApplication {

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

 

3、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

instance-id: xxx-server:${spring.cloud.client.ip-address}:${server.port}

 

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

由于所有服务都会注册到注册中心去,服务之间的调用都是通过从注册中心获取的服务列表来调用,注册中心一旦宕机,所有服务调用都会出现问题。所以我们需要多个注册中心组成集群来提供服务,下面将搭建一个双节点的注册中心集群。

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

 单机集群配置:

 找到C:\Windows\System32\drivers\etc\hosts文件:

修改映射配置加入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/

 

7、项目启动注意:

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

 

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

启动类上添加: @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()+ "\t" + instance.getHost()+ "\t" + instance.getPort()
         + "\t" + instance.getUri());
    }
    return this.discoveryClient;
}

 

9、Eureka的常用配置

eureka:
  client: #eureka客户端配置
    register-with-eureka: true #是否将自己注册到eureka服务端上去
    fetch-registry: true #是否获取eureka服务端上注册的服务列表
    service-url:
      defaultZone: http://localhost:8001/eureka/ # 指定注册中心地址
    enabled: true # 启用eureka客户端
    registry-fetch-interval-seconds: 30 #定义去eureka服务端获取服务列表的时间间隔
  instance: #eureka客户端实例配置
    lease-renewal-interval-in-seconds: 30 #定义服务多久去注册中心续约
    lease-expiration-duration-in-seconds: 90 #定义服务多久不去续约认为服务失效
    metadata-map:
      zone: jiangsu #所在区域
    hostname: localhost #服务主机名称
    prefer-ip-address: false #是否优先使用ip来作为主机名
  server: #eureka服务端配置
    enable-self-preservation: false #关闭eureka服务端的保护机制

 

10、Eureka服务手动上下线

eureka 服务下线
curl -X PUT "http://ip:port/eureka/apps/{application}/{instance}/status?value=OUT_OF_SERVICE"
其中:
application: 服务名称。
instance: 需要下线的实例名称
示例:
https://192.168.248.5/eureka/apps/PROPERTY-PROJECT/192.168.230.1:8386/status?value=OUT_OF_SERVICE

eureka 服务上线
curl -X PUT "http://ip:port/eureka/apps/{application}/{instance}/status?value=UP"
示例:
https://192.168.248.5/eureka/apps/PROPERTY-PROJECT/192.168.230.1:8386/status?value=UP

 

 

 

 

 

posted @ 2020-04-04 23:51  邓维-java  阅读(465)  评论(0编辑  收藏  举报