微服务远程调用和负载均衡

100 阅读1分钟

1.微服务远程调用

  • 基于RestTemplate发起的http请求实现远程调用
  • 在启动类中注入Bean
    /**
     * 创建RestTemplate并注入spring容器
     * @return
     */
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
  • 依赖注入
    @Autowired
    private RestTemplate restTemplate;
  • 使用方法
    // 先定义远程访问对应的url
    String url = "http://localhost:8081/user/" + order.getUserId();
    // 通过调用restTemplate的方法来远程访问并获取返回值,这里的getForObject方法的返回值可以指定自己定义的POJO类,还有很多其他方法,请示情况而定
    User user = restTemplate.getForObject(url, User.class);

2.Eureka注册中心

  • 在这里插入图片描述

  • 搭建EurekaServer

    • 先在父目录下创建一个maven项目eureka-server

    • pom文件引入依赖

    •  <dependencies>
              <!--eureka服务端-->
              <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
              </dependency>
       </dependencies>
      
    • 创建application.yml文件添加相关信息

    • server:
        port: 10086 # 服务端口
      spring:
        application:
          name: eurekaserver # eureka的服务名称
      
      eureka:
        client:
          service-url: # eureka的地址信息
            defaultZone: http://127.0.0.1:10086/eureka
      
  • 服务注册

    • pom文件引入依赖

    •     <!--eureka客户端依赖-->
          <dependency>
              <groupId>org.springframework.cloud</groupId>
              <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
          </dependency>
      
    • 修改application.yml文件添加配置信息

    •   spring:
          application:
            name: userservice # order服务的服务名称
        eureka:
          client:
            service-url: # eureka的地址信息
              defaultZone: http://127.0.0.1:10086/eureka
      
  • 服务发现

    • 引入依赖

    •     <!--eureka客户端依赖-->
          <dependency>
              <groupId>org.springframework.cloud</groupId>
              <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
          </dependency>
      
    • application.yml中配置eureka地址

    •   spring:
          application:
            name: orderservice # order服务的服务名称
        eureka:
          client:
            service-url: # eureka的地址信息
              defaultZone: http://127.0.0.1:10086/eureka
      
    • 给RestTemplete添加@LoadBalanced注解

    •     /**
           * 创建RestTemplate并注入spring容器
           * @return
           */
          @Bean
          @LoadBalanced
          public RestTemplate restTemplate() {
              return new RestTemplate();
          }
      
    • 用服务提供者的服务名称远程调用

    •         String url = "http://userservice/user/" + order.getUserId();
              User user = restTemplate.getForObject(url, User.class);
      

3.测试

在这里插入图片描述

我们注册了两个服务端口号分别为8081和8082

当我们远程访问userservice的时候,会自动进行负载均衡

4.为什么会自动负载均衡

在这里插入图片描述 在这里插入图片描述

5.负载均衡策略

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

6.Ribbon饥饿加载

在这里插入图片描述