微服务技术栈

132 阅读2分钟

微服务调用

1、微服务调用方式

  • 基于Restemplate发起的http请求实现远程调用
  • http请求做远程调用是与语言无关的调用,只要知道对方的ip、端口、接口路径、请求参数即可

2、提供者与消费者

  • 服务的提供者:一次业务中,被其他微服务调用的服务(提供接口)
  • 服务的消费者:一次业务中,调用其他微服务的服务(调用接口)

Eureka

Eureka注册中心

服务端调用存在的问题

  • 服务消费者该如何获取服务提供者的地址信息?
  • 如果有多个服务提供者,消费者该怎么选择?
  • 如何确保服务提供者的健康状态

Eureka的作用

image.png

回到之前的问题

  • 服务消费者该如何获取服务提供者的地址信息?

    • 服务提供者启动时想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
}