SpringCloud.01.基本使用与nacos

什么是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中导入依赖

<spring-boot.version>2.4.1</spring-boot.version>
<spring-cloud.version>2020.0.0</spring-cloud.version>
<spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>


<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
导入三个版本的原因 :
nacos 来自 Spring Cloud Alibaba ( 用于代替 SpringCloud Eureka SpringCloud Config)
feign 来自 Spring Cloud
其他的正常来自与 SpringBoot
定义cloud的子类让子类能使用父类的依赖
 <!--定义儿子-->
  <modules>
    <module>provider</module>
    <module>consumer</module>
      <module>common</module>
  </modules>

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

<!--继承父类 大项目 拥有了依赖和版本-->
    <parent>
        <artifactId>cloud</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

生产者和消费者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

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>

注入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;
    }

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

它的作用是负载均衡,会帮你在每次请求时选择一台机器,均匀的把
请求分发到各个机器上
  • 35
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值