Eureka

Eureka是Netflix开发的服务治理框架,包含注册中心和客户端组件。注册中心负责维护服务实例,服务通过客户端注册到中心。集群部署时,Eureka实例间会互相注册。自我保护机制默认开启,防止网络抖动导致服务过早剔除。关闭自我保护可提高服务剔除效率。
摘要由CSDN通过智能技术生成

Eureka

Eureka是NetFix公司开发的服务治理框架

在这里插入图片描述
在这里插入图片描述
Eureka两大组件
在这里插入图片描述

1.单机版eureka

1.1 Eureka注册中心(类似物业中心)

cloud-eureka-server7001

<dependencies>
        <!-- eureka-server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--监控-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!-- 一般通用配置 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

2018以前的版本引入的eureka的maven

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

springcloudAlibab使用的maven

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

server:
port: 7001
eureka:
instance:
hostname: localhost #eureka服务端的实例名
client:
register-with-eureka: false #false表示不向注册中心注册自己
fetch-registry: false #false表示自己端就是注册中心,维护实例,不需要检索服务
service-url:
defaultZone: http:// e u r e k a . i n s t a n c e . h o s t n a m e : {eureka.instance.hostname}: eureka.instance.hostname:{server.port}/eureka/

主启动类

@EnableEurekaServer

@SpringBootApplication
@EnableEurekaServer
public class EurekaMain7001 {
    public static void main(String[] args) {
        SpringApplication.run(EurekaMain7001.class,args);
    }
}

测试 http://localhost:7001/

在这里插入图片描述

1.2 服务注册到注册中心

pom

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

yml

eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:7001/eureka

主启动类上加
@EnableEurekaClient
http://localhost:7001/
在这里插入图片描述

1.3 消费者从注册中心拉取

cloud-consumer-order80
pom

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

yml

server:
  port: 80

spring:
  application:
    name: cloud-order-service
eureka:
  client:
    fetch-registry: true
    register-with-eureka: true
    service-url:
      defaultZone: http://localhost:7001/eureka

主启动类上加上

@EnableEurekaClient

2、集群eureka

2.1 修改映射配置

host文件 找到C:\Windows\System32\drivers\etc\下的host文件
127.0.0.1 eureka7001.com
127.0.0.1 eureka7002.com

server:
  port: 7001
eureka:
  instance:
    hostname: eureka7001.com #eureka服务端的实例名
  client:
    register-with-eureka: false  #false表示不向注册中心注册自己
    fetch-registry: false #false表示自己端就是注册中心,维护实例,不需要检索服务
    service-url:
      defaultZone: http://eureka7002.com:7002/eureka/ #向eureka7002注册相互注册

http://eureka7001.com:7001/

在这里插入图片描述

2.2 生产者集群

eureka:
  client:
    #表示是否将自己注册进EurekaServer默认为true
    register-with-eureka: true
    #是否从EurekaServer抓取已有的注册消息,默认为true,单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
    fetch-registry: true
    service-url:
      #defaultZone: http://localhost:7001/eureka
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/
 

负载均衡
在消费方的地址不能写死,否则多个实例就没有意义

使用服务名访问http://CLOUD-PAYMENT-SERVICE

使用@LoadBalanced注解赋予RestTemplate负载均衡的能力

@Configuration
public class MyConfig {
   @Bean
   @LoadBalanced
   public RestTemplate getRestTemplate() {
       return new RestTemplate();
   }
}

此时消费者消费会8001和8002轮询的使用

2.4 actuator微服务信息完善

instance

eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
  instance:
    instance-id: payment8002
    prefer-ip-address: true

2.5 服务发现

对于注册到eureka里面的微服务,可以通过服务发现来获得该服务的信息

@RestController
@Slf4j
public class DiscoverController {
  @Resource
  private DiscoveryClient discoveryClient;
  @GetMapping("/discover")
  public Object discovery() {
      List<String> services = discoveryClient.getServices();

      for (String service : services) {
          log.info("*****element:" + 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;
  }

主启动类

@EnableDiscoveryClient

http://localhost:8001/payment/discovery

3.自我保护

一句话: 某时刻某一个微服务不可用了,Eureka不会立即清理,依旧会对该微服务的信息进行保存

属于CAP里面的AP分支

怎么关闭

注册中心eurekaServer端7001

  • 出厂默认,自我保护机制是开启的(eureka.server.enbale-self-preservation=true)

    使用eureka.server.enbale-self-preservation=false可以禁止自我保护

生产者客户端eurekaClient端8001

Eureka服务端
eureka:
   server:
     #关闭自我保护模式,保证不可用服务被及时删除
     enable-self-preservation: false
     eviction-interval-timer-in-ms: 2000
服务消费者 Payment
eureka:
  client:
    #表示是否将自己注册进EurekaServer默认为true
    register-with-eureka: true
    #是否从EurekaServer抓取已有的注册消息,默认为true,单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
    fetch-registry: true
    service-url:
      #集群版
      #defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/
      #单机版
      defaultZone: http://eureka7001.com:7001/eureka/
  instance:
    instance-id: payment8001
    prefer-ip-address: true #访问路径可以显示ip
    #Eureka客户端向服务端发送心跳的实际间隔,单位为秒(默认为30秒)
    lease-renewal-interval-in-seconds: 1
    #Eureka服务端收到最后一次心跳后等待时间上线,单位为秒(默认为90秒) 超时将剔除服务
    lease-expiration-duration-in-seconds: 2

先启动7001再启动8001,在关闭8001

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值