SpringCloud.01.基本使用与nacos

SpringCloud.01.基本使用与nacos_第1张图片

什么是SpringCloud

业务场景介绍

  • 开发一个电商网站,要实现支付订单的功能,流程如下:
  • 创建一个订单之后,如果用户立刻支付了这个订单,我们需要将订单状态更新为已支付
  • 扣减相应的商品库存
  • 通知仓储中心,进行发货
  • 给用户的这次购物增加相应的积分

服务分析

订单服务、库存服务、仓储服务、积分服务

流程调用

  • 用户针对一个订单完成支付之后,就会去找订单服务,更新订单状态
  • 订单服务调用库存服务,完成相应功能
  • 订单服务调用仓储服务,完成相应功能
  • 订单服务调用积分服务,完成相应功能

springcloud拥有许多核心组件:

  • Eureka:各个服务启动时,Eureka Client都会将服务注册到Eureka Server,并且Eureka Client
  • 可以反过来从Eureka Server拉取注册表,从而知道其他服务在哪里
  • Ribbon:服务间发起请求的时候,基于Ribbon做负载均衡,从一个服务的多台机器中选择一台
  • Feign:基于Feign的动态代理机制,根据注解和选择的机器,拼接请求URL地址,发起请求
  • Hystrix:发起请求是通过Hystrix的线程池来走的,不同的服务走不同的线程池,实现了不同服务
  • 调用的隔离,避免了服务雪崩的问题
  • Zuul:如果前端、移动端要调用后端系统,统一从Zuul网关进入,由Zuul网关转发请求给对应的服

流程:

1. 请求统一通过 API 网关( Zuul )来访问内部服务 .
2. 网关接收到请求后,从注册中心( Eureka )获取可用服务
3. Ribbon 进行均衡负载后,分发到后端具体实例
4. 微服务之间通过 Feign 进行通信处理业务
5. Hystrix 负责处理服务超时熔断

简单介绍后接下来开始实战:

创建一份maven项目命名为cloud用来存放所有依赖,接下来在此项目下创建两个springboot项目分别命名为provider和consumer。

在cloud中导入依赖

2.4.1
2020.0.0
2021.1



org.springframework.boot
spring-boot-dependencies
${spring-boot.version}
pom
import


org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import


com.alibaba.cloud
spring-cloud-alibaba-dependencies
${spring-cloud-alibaba.version}
pom
import
导入三个版本的原因 :
nacos 来自 Spring Cloud Alibaba ( 用于代替 SpringCloud Eureka SpringCloud Config)
feign 来自 Spring Cloud
其他的正常来自与 SpringBoot
定义cloud的子类让子类能使用父类的依赖
 
  
    provider
    consumer
      common
  

两个子类provider和consumer都需要继承父类


    
        cloud
        org.example
        1.0-SNAPSHOT
    

生产者和消费者ym和Applicationl文件构建  消费者修改名字和端口号即可

server:
    port: 8080
spring:
    application:
        name: provider


@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {

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

}

接下来从注册中心(Eureka)获取可用服务,我这里使用的事nacos它的功能比Eureka更强大,Nacos采用了分布式的架构。但是我们的生成者provider可能不止一个所以还会用到负载均衡。因为核心组件ribbon已经停止更新所以使用Srping Cloud Loadbalancer


org.springframework.cloud
spring-cloud-loadbalancer

注入RedisTemplate 放在Consumer的Application类下即可

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

这时候使用了nacos注册了服务所以消费者可以通过项目名provider找到相应的路径

 @RequestMapping("/run")
    public String run() {
        //String.class接受的是Sting 鸡腿
        //使用了nacos 可以直接"http://provider/run" 它会帮你找到 负载均衡 服务注册中心 心跳检测机制
        String forObject = restTemplate.getForObject("http://provider/run", String.class);
        return forObject;
    }

上面的负载均衡的作用是:假设有两台服务器,现在只有一个订单,会自动分配给其中一个服务器,让资源合理利用,杜绝一台机器使用,另一台荒废的情况。

它的作用是负载均衡,会帮你在每次请求时选择一台机器,均匀的把
请求分发到各个机器上

你可能感兴趣的:(spring,cloud,spring,后端)