SpringCloud入门笔记

SpringCloud

什么是springcloud?

微服务是分布式架构的一种,而分布式是将服务进行拆分,再拆分的过程中会产生各种各样的问题。而cloud在当中解决的仅仅是服务治理问题

1.Eureka入门

1.1 服务端

  1. 导入Maven坐标
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
  1. yml配置

    eureka:
      client:
        service-url:
          defaultZone: http://localhost:10086/eureka
    
  2. 开启@EnableEurekaServer注解

1.2 客户端

  1. 导入坐标

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
    
  2. yml配置

    eureka:
      client:
        service-url:
          defaultZone: http://localhost:10086/eureka
    
  3. 开启@EnableEurekaClient注解

  4. 启动多个实例配置

在这里插入图片描述

  1. 开启负载均衡

在这里插入图片描述

为什么通过其它服务名称能调用服务呢?查看LoadBalanced源码

通过LoadBalancerInterceptor拦截RestTemplate请求,然后从eureka根据服务id拿到服务列表,然后根据负载均衡算法得到真实地址 替换服务id

在这里插入图片描述

创建负载均衡器,拿到列表集合
在这里插入图片描述

通过负载均衡算法选择server

继续跟进server方法
在这里插入图片描述

在这里插入图片描述

这里使用默认的轮询算法
在这里插入图片描述

自定义负载均衡策略

yml配置

userservice: # 给某个微服务配置负载均衡规则,这里是userservice服务
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则 

Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。

而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:

ribbon:
  eager-load:
    enabled: true
    clients: userservice

2.Nacos入门

  1. 导入坐标

            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
    
  2. yml配置

    spring:
      cloud:
        nacos:
          server-addr: localhost:8848
    
  3. 配置集群

    spring:
      cloud:
        nacos:
          server-addr: localhost:8848
          discovery:
            cluster-name: HZ # 集群名称
    -Dserver.port=8083 -Dspring.cloud.nacos.discovery.cluster-name=SH     启动多个服务   
    
  4. 配置负载均衡

    userservice:
      ribbon:
        NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则 
    
  5. Eureka和Nacos区别?

    nacos对于临时结点采用心跳机制,对于非临时结点采用主动检测模式,非临时结点不会被剔除

    nacos支持服务列表变更的消息推送模式,服务列表及时更新

    nacos集群支持CP和AP,默认使用AP,当集群有非临时结点时使用CP,Eureka使用AP

  6. config配置

    <!--nacos配置管理依赖-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
    

    添加bootstrap.yaml

    spring:
      application:
        name: userservice # 服务名称
      profiles:
        active: dev #开发环境,这里是dev 
      cloud:
        nacos:
          server-addr: localhost:8848 # Nacos地址
          config:
            file-extension: yaml # 文件后缀名
    

    配置热更新

    在@Value注入的变量所在类上添加注解@RefreshScope

    或者添加一个配置类

    @Component
    @Data
    @ConfigurationProperties(prefix = "pattern")
    public class PatternProperties {
        private String dateformat;
    }
    

3.Feign入门

       <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
@FeignClient("userserivce")
public interface UserServiceFeign {

    @GetMapping("/{id}")
    public User queryById(@PathVariable("id") Long id);
}

启动类加上注解@EnableFeignClients

Feign性能优化

feign:
  client:
    config:
      default:
        loggerLever: BASIC #日志级别 只打印请求和响应数据
  httpclient:
    enabled: true #开启feign对httpClient的支持
    max-connections: 200 #最大连接数
    max-connections-per-route: 50 #每个路径的最大连接数

feign的底层客户端是URLConnection 是jdk自带的不支持连接池 那么就意味着每次请求都需要进行3次握手和4次挥手 很大的影响的性能

4.Gateway入门

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
    gateway:
      routes:
        - id: order-service
          uri: lb://orderservice   # 负载均衡路由服务
          predicates:
            - Path=/order/**   # 断言 根据请求路径匹配
          filters:             # 路由过滤器
            - AddRequestHeader=Truth,Liubo666
     globalcors:
       add-to-simple-url-handler-mapping: true  #解决options请求被拦截问题
       cors-configurations:
         '[/**]':
           allowedOrigns: # 允许哪些网站跨域请求
             - "http://localhost:8083"
           allowedMethods:  #允许跨域的ajax请求方式
             - "GET"
             - "POST"
             - "DELETE"
           allowedHeaders: "*" #允许在请求中携带的头信息
           allowCredentials: true  #是否允许携带cookie
           maxAge: 360000 #本次跨域的有效期
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值