学习下Eureka组件的结构和作用以及实现步骤

 

1.Eureka做什么的?论述一下

Eureka是CS架构,而服务消费者和服务提供者都属于eureka-client(客户端),使用组件eureka组件都需要导入eureka启动器和依赖,导完后才可以跟服务端口进行交互,服务提供者和服务消费者将url地址信息提交给eureka,消费者通过注册名称获取每一个提供者的地址信息,消费者通过负载均衡(随机或者轮循的方式),获取地址后远程调用。
eureka可以感知服务提供者的心跳来判断服务提供者的存活状态(心跳:服务提供者每隔30秒向eureka发送一次请求),如果90秒内eureka没有接收到服务提供者的请求,eureka就会服务剔除(每隔60秒剔除一次,剔除到一定程度便不在剔除),同样服务消费者每隔30秒拉取一次提供者的信息。存在一种现象(微服务拉取地址信息很长时间,因有可能有些服务提供者死掉了,等待重新拉取后就好了)。

2.Eureka的作用

a.消费者该如何获取服务提供者具体信息?
  *服务提供者启动时向eureka注册自己的信息
  *eureka保存这些信息
 * 消费者根据服务名称向eureka拉取提供者信息


b.如果有多个服务提供者,消费者该如何选择?
  *服务消费者利用负载均衡算法,从服务列表中挑选一个


c.消费者如何感知服务提供者健康状态?
  *服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态
  *eureka会更新记录服务列表信息,心跳不正常会被剔除
  消费者就可以拉取到最新的信息

#eureka服务端jar包中包含了客户端的jar包   为什么?---------为了实现eureka服务端集群下服务端内容同步

3.Eureka实现步骤? 技术的使用方式? (一)搭建注册中心

在项目中创建模块eureka-server

1.在pom中导入依赖 引入spring-cloud-starter-netflix-eureka-server的依赖

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

 2.编写启动类,添加@EnableEurekaServer注解

 3.添加application.yml文件,编写下面的配置:

server:
  port: 10086
spring:
  application:
#    给当前服务起名称(不能有下划线,否则驼峰映射会造成名称错误)
    name: eureka-server
eureka:
#  配置eureka客户端要连接的服务端信息
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka
#      客户端不用注册自己到服务端
    register-with-eureka: false # 不注册自己
#   客户端不需要从服务端拉取任何信息
    fetch-registry: false #不拉取服务本eureka服务中的服务信息

 组件eureka搭建后访问,http://localhost:10086/

 

 (二)服务注册

1.引入eureka-client依赖

把服务端的信息传给eureka组件中去,在其依赖中导入eureka客户端jar包

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

 

2.

在application.yml中配置服务名称

spring:
  application:
    name: userservice

 


在application.yml中配置eureka地址(代码后面四行可以不要,要更好)

 

eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka
  instance: # 在Eureka中显示服务的ip地址
    ip-address: 127.0.0.1 # 配置服务器ip地址
    prefer-ip-address: true # 更倾向于使用ip,而不是host名
    instance-id: ${eureka.instance.ip-address}:${server.port} # 自定义实例的id

 (不加或者加后面四行代码的区别显示):

 

 

 

 (三)服务发现

(在进行搭建eureka组件,服务提供者和消费者的application.yml文件都去配置eureka地址,因为服务角色可以调换)
引入eureka-client依赖

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

在application.yml中配置eureka地址

spring:
  application:
    name: orderservice
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka

 
给RestTemplate添加@LoadBalanced注解

 

 


修改order-service服务中的cn.itcast.order.service包下的OrderService类中的queryOrderById方法。修改访问的url路径,用服务名代替ip、端口:

 

 spring会自动帮助我们从eureka-server端,根据userservice这个服务名称,获取实例列表,而后完成负载均衡。



posted @ 2021-11-20 09:38  再思  阅读(448)  评论(0编辑  收藏  举报