ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SpringCloud-01

2021-12-11 01:02:33  阅读:148  来源: 互联网

标签:负载 01 SpringCloud RestTemplate eureka application spring public


1、微服务技术

 

2、SpringCloud

  • SpringCloud是目前国内使用最广泛的微服务框架。官网地址:https://spring.io/projects/spring-cloud。
  • SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验:

 

 

 3、SpringCloud与SpringBoot的版本兼容关系如下:

 

 

 4、服务间远程调用方式(RestTemplate):

1:在服务调用端配置类中添加RestTemplate Bean

 1 @SpringBootApplication
 2 public class OrderApplication {
 3 
 4     public static void main(String[] args) {
 5         SpringApplication.run(OrderApplication.class, args);
 6     }
 7 
 8     @Bean
 9     public RestTemplate getRestTemplate(){
10         return new RestTemplate();
11     }
12 
13 }

2:在需要远程调用时使用RestTemplate发送http请求

 1 @Service
 2 public class OrderService {
 3 
 4     @Autowired
 5     private OrderMapper orderMapper;
 6 
 7     @Autowired
 8     private RestTemplate restTemplate;
 9 
10     public Order queryOrderById(Long orderId) {
11         // 1.查询订单
12         Order order = orderMapper.findById(orderId);
13         // 2. 发送请求查询用户信息
14         String url="http://localhost:8081/user/"+order.getUserId();
15         User user = restTemplate.getForObject(url, User.class);
16         //3.将用户传给订单对象
17         order.setUser(user);
18         // 4.返回
19         return order;
20     }
21 }

5、Eureka注册中心

原理图解:

 

 

 1、搭建EurekaServer

① 创建项目,引入spring-cloud-starter-netflix-eureka-server的依赖

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

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

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

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

2、服务注册EurekaClient

① 在order-service项目引入spring-cloud-starter-netflix-eureka-client的依赖

<!--eureka客户端依赖-->
<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

② 在application.yml文件,编写下面的配置

spring:
  application:
    name: orderservice # 服务名

eureka:
  client:
    service-url:  # eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka

3、消费端拉取服务、负载均衡

① 修改OrderService的代码,修改访问的url路径,用服务名代替ip、端口

String url = "http://userservice/user/" + order.getUserId();

② 在order-service项目的启动类OrderApplication中的RestTemplate添加负载均衡注解

@SpringBootApplication
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }

    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }

}

4、总结

一、搭建EurekaServer
    1、引入eureka-server依赖
    2、添加@EnableEurekaServer注解
    3、在application.yml中配置eureka地址
二、服务注册
    1、引入eureka-client依赖
    2、在application.yml中配置eureka地址
三、服务发现
    1、引入eureka-client依赖
    2、在application.yml中配置eureka地址
    3、给RestTemplate添加@LoadBalanced注解
    4、用服务提供者的服务名称远程调用    

6、Ribbon负载均衡

1、负载均衡流程图

 

2、负载均衡源码流程图

 

 3、负载均衡策略

Ribbon的负载均衡规则是一个叫做IRule的接口来定义的,每一个子接口都是一种规则

 

 

 不同策略类接口含义

 

 4、负载均衡策略修改

通过定义IRule实现可以修改负载均衡规则,有两种方式

① 代码方式:在消费端中的配置类中,定义一个新的IRule

@Bean
public IRule randomRule(){
    return new RandomRule();
}

② 配置文件方式:在order-service的application.yml文件中,添加新的配置也可以修改规则

userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #负载均衡规则 

5、饥饿加载

Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。 而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载

ribbon:
  eager-load:
    enabled: true  #开启饥饿加载 
    clients: userservice  #指定对userservice这个服务饥饿加载

6、总结

一、Ribbon负载均衡规则
    1、规则接口是IRule
    2、默认实现是ZoneAvoidanceRule,根据zone选择服务列表,然后轮询
二、负载均衡自定义方式
    1、代码方式:配置灵活,但修改时需要重新打包发布
    2、配置方式:直观,方便,无需重新打包发布,但是无法做全局配置
三、饥饿加载
    1、开启饥饿加载
    2、指定饥饿加载的微服务名称

 

标签:负载,01,SpringCloud,RestTemplate,eureka,application,spring,public
来源: https://www.cnblogs.com/sun-10387834/p/15674355.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有