一、直接远程调用会出现的问题
- 1、服务消费者该如何获取服务提供者的地址信息?
- 2、如果有多个服务提供者,消费者该如何选择?
- 3、消费者如何得知服务提供者的健康状态?(万一url的服务已停用)
基于以上问题可以用Eureka(注册中心来解决)
二、Eureka(注册中心)作用
通过以上问题进行回答:
-
问:—消费者该如何获取服务提供者具体信息?
答:1、服务提供者启动时向eureka注册自己的信息(个人觉得有点类似观察者模式中的注册观察者)
2、eureka保存这些信息
3、消费者根据服务名称向eureka拉取提供者信息(orderservice要向userservice请获取某个user的信息,根据提供服务名称userservice来拉去提供者url) -
问:—如果有多个服务提供者,消费者该如何选择?
答:服务消费者利用负载均衡算法,从服务列表中挑选一个 -
问:—消费者如何感知服务提供者健康状态?
答:服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态eureka会更新记录服务列表信息,心跳不正常会被剔除,消费者就可以拉取到最新的信息
三、Eureka(注册中心)的角色
- EurekaServer:服务端,注册中心
1、记录服务信息
2、心跳监控 - EurekaClient:客户端
1、Provider:服务提供者,例如案例中的 user-service
–注册自己的信息到EurekaServer
–每隔30秒向EurekaServer发送心跳
2、consumer:服务消费者,例如案例中的 order-service
–根据服务名称从EurekaServer拉取服务列表
–基于服务列表做负载均衡,选中一个微服务后发起远程调用
四、Eureka(注册中心)的使用
1、搭建注册中心(搭建EurekaServer)
-
创建项目,引入依赖
-
编写启动类,并且加上注解@EnableEurekaServer注册中心开关
-
添加application.yml配置文件
2、服务注册(将user-service、order-service都注册到eureka)
- user-service、order-service服务中引入依赖
- 在配置文件application.yml增加eureka客户端配置
–orderservice配置
–userservice配置
3、完成服务拉取
- 修改OrderService的代码,修改访问的url路径,用服务名代替ip、端口
- 在启动类中注入的RestTemplate添加负载均衡注解(详情下节会展开)
4、测试
- 在eureka服务器中观察注册的客户端
- 查出结果