Eureka介绍-小白自学笔记

1.Eureka

Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。

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

Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。

Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就是一个内置的、使用轮询(round-robin)负载算法的负载均衡器。

在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。

Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。

 

 

2使用eureka步骤

1.搭建eureka server

1.1 创建一个工程,导入依赖

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

1.2 导入相应坐标

1.3 配置application.yml

server:
  port: 9000   #端口
#配置eureka server
eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false #是否将自己注册到注册中心
    fetch-registry: false #是否从eureka中获取注册信息
    service-url: #配置暴露给Eureka Client的请求地址
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

1.4 配置启动类

 

@SpringBootApplication
//激活eurekaserver
@EnableEurekaServer
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class,args);
    }
}

2.将服务提供者注册到eurekaServer上

2.1 引入EurekaClient的坐标

 

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

2.2 修改application.yml添加EurekaServer的信息

 

#配置Eureka
eureka:
  client:
    service-url:
      defaultZone: http://localhost:9000/eureka/
    instance:
      prefer-ip-address: true #使用ip地址注册

2.3 修改启动类,添加服务发现的支持(可选)

 

@SpringBootApplication
@EntityScan("cn.itcast.product.entity")
//@EnableEurekaClient
//@EnableDiscoveryClient与上面那个用途一样
//新版本的springCloud中,在配置好配置中心之后,系统会自动把信息注册上去,这两个不写也可以
public class ProductApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProductApplication.class,args);
    }
}

3.服务消费者通过注册中心获取服务列表并调用

//注入RestTemplate对象
@Autowired
private RestTemplate restTemplate;

/**
 * 注入DiscoveryClient:
 *  springcloud提供的获取元数据的工具类
 *      调用方法和获取服务的元数据信息
 */
@Autowired
private DiscoveryClient discoveryClient;


/**
 * 参数:商品id
 *  通过订单系统,调用商品服务,根据id查询商品信息
 *          1.需要配置商品对象
 *          2.需要调用商品服务
 *    使用java中的urlconnection,httpclient,okhttp
 */
@RequestMapping(value = "/buy/{id}",method = RequestMethod.GET)
public Product findById(@PathVariable Long id){
    //调用discoveryClient方法
    //已调用服务名称获取所有的元数据
    List<ServiceInstance>instances =  discoveryClient.getInstances("service-product");
    //获取唯一的一个元数据
    ServiceInstance instance = instances.get(0);
    //调用商品服务,根据元数据中的主机地址和端口号拼接请求微服务的URL
    return restTemplate.getForObject("http://"+instance.getHost()+":"+instance.getPort()+"/product/1",Product.class);
}

 

3.EurekaServer的高可用

1.准备2个EurekaServer,需要互相注册

1号server:9000

2号server:8000

 

启动EurekaApplication然后立即停止,在Run Dashboard中改名字,并改属性

 

 

复制一份,然后改成对应项

Apply&&OK

然后在

这个下启动EurekaServer8000

再将9000改成8000启动EurekaServer9000

完成

2.需要将微服务注册到两个EurekaServer上

在需要注册Eureka的服务配置文件.yml中,将多个EurekaServer地址全部注入

3细节问题

1.在控制台显示服务IP

在服务提供者配置文件中,通过eureka.instance.instance-id配置控制台显示服务ip

#配置Eureka
eureka:
  client:
    service-url:
      defaultZone: http://localhost:9000/eureka/,http://localhost:8000/eureka/  #多个EurekaServer之间用','隔开
    instance:
      prefer-ip-address: true #使用ip地址注册
      instance-id: ${spring.cloud.client.ip-address}:${server.port} #向注册中心中注册服务

2.服务剔除问题

在服务的提供者,设置心跳间隔,设置续约到期时间

#配置Eureka
eureka:
  client:
    service-url:
      defaultZone: http://localhost:9000/eureka/,http://localhost:8000/eureka/  #多个EurekaServer之间用','隔开
    instance:
      prefer-ip-address: true #使用ip地址注册
      instance-id: ${spring.cloud.client.ip-address}:${server.port} #向注册中心中注册服务
      lease-renewal-interval-in-seconds: 5 #向注册中心注册服务id
      lease-expiration-duration-in-seconds: 10 #续约到期的时间

3.Eureka自我保护机制

在Eureka中配置关闭自我保护,设置剔除服务时间

#配置eureka server
eureka:
  client:
    register-with-eureka: false #是否将自己注册到注册中心
    fetch-registry: false #是否从eureka中获取注册信息
    #配置暴露给Eureka Client的请求地址
    service-url:
      defaultZone: http://127.0.0.1:9000/eureka/
  server:
    enable-self-preservation: false #关闭自我保护
    eviction-interval-timer-in-ms: 4000  #设置剔除服务间隔

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值