微服务调用
1、微服务调用方式
- 基于Restemplate发起的http请求实现远程调用
- http请求做远程调用是与语言无关的调用,只要知道对方的ip、端口、接口路径、请求参数即可
2、提供者与消费者
- 服务的提供者:一次业务中,被其他微服务调用的服务(提供接口)
- 服务的消费者:一次业务中,调用其他微服务的服务(调用接口)
Eureka
Eureka注册中心
服务端调用存在的问题
- 服务消费者该如何获取服务提供者的地址信息?
- 如果有多个服务提供者,消费者该怎么选择?
- 如何确保服务提供者的健康状态
Eureka的作用
回到之前的问题
-
服务消费者该如何获取服务提供者的地址信息?
-
服务提供者启动时想eureka注册自己的信息 -
eureka保存这些信息 -
消费者根据服务名称向eureka拉取提供者信息
-
-
如果有多个服务提供者,消费者该怎么选择?
-
负载均衡算法
-
-
如何确保服务提供者的健康状态
-
服务提供者每隔三十秒向EurekaServer发送心跳请求,报告健康状态 -
eureka会更新记录到服务列表信息,心跳不正常会被剔除 -
消费者就可以拉取到最新的信息
-
服务注册
-
引入eureka-client依赖
-
在application.yml中配置eureka地址
-
无论是消费者还是提供者都可以引入eureka-client依赖、知道eureka地址后,都可以完成服务注册
在order-service完成服务拉取
服务拉取是基于服务名称获取服务列表,然后再对服务列表做负载均衡
1、修改OrderService的代码,修改访问的url路径,用服务名代替ip、端口:
String url = "http://userservice/user" + order.getUserId();
2、在order-service项目的启动类OrderApplication中的ResTemplate添加负载均衡注解:
@Bean
@LoadBalanced
public Restemplate restTemplate() {
return new RestTemplate();s
}