• SpringCloudAlibaba入门学习笔记20240408~20240424


    跟学b站“图灵架构师”SpringCloudAlibaba入门教程

    系统架构演化进程

    单体应用架构>垂直应用架构>分布式架构>SOA架构>微服务架构
    1、针对微服务架构:
    如何管理众多小服务?(服务治理 注册中心[服务注册 发现 剔除])nacos
    众多小服务之间如何通讯?(restfui rpc dubbo feign) ,httpclient(“url”,参数),springBoot restTemplate(“url”,参数), feign
    客户端怎么访问小服务?(网关)gateway
    小服务一旦出现问题,如何自处理?(容错)sentinel
    小服务一旦出现问题,如何排错?(链路追踪)skywalking
    2、SpringCloudAlibaba——以微服务为核心的分布式系统构建标准
    spring cloud的标准实现
    在这里插入图片描述

    代码实践——环境搭建

    IDEA版本:2021.1
    一、新建parent项目
    step1
    在这里插入图片描述
    step2
    在这里插入图片描述
    在这里插入图片描述
    二、新建子服务:以maven方式创建
    step1
    在这里插入图片描述
    step2
    在这里插入图片描述
    step3:可选parent项目
    在这里插入图片描述
    finish后得:
    在这里插入图片描述
    对子项目进行依赖导入:pom.xml文件中导入dependency,该依赖的引用是为了使用RestTemplate进行服务间调用。

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    
    • 1
    • 2
    • 3
    • 4

    三、nacos未启用前——子服务之间调用
    创建项目启动类——添加项目配置文件——创建接口调用服务
    order和stock都以同样方式进行项目简单搭建:
    在这里插入图片描述
    step1
    新建配置文件application.yaml,做简单配置,配置项目端口:

    #order的服务端口
    server:
      port: 8080
    
    • 1
    • 2
    • 3
    #stock的服务端口
    server:
      port: 8011
    
    • 1
    • 2
    • 3

    step2
    构建启动类

    @SpringBootApplication
    public class OrderApplication {
        public static void main(String[] args) {
            SpringApplication.run(OrderApplication.class,args);
        }
        //暂时将RestTemplate的实例对象构建方法配置在启动类
         @Bean
        public RestTemplate restTemplate(RestTemplateBuilder builder){
            RestTemplate restTemplate = builder.build();
            return restTemplate;
         }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    @SpringBootApplication
    public class StockApplication {
        public static void main(String[] args) {
            SpringApplication.run(StockApplication.class,args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    step3
    编写order服务接口调用stock服务

    @RestController
    @RequestMapping("/order")
    public class OrderController {
        @Autowired
        RestTemplate restTemplate;
        @RequestMapping("/add")
        public String add(){
            String msg = restTemplate.getForObject("http://localhost:8011/stock/reduct", String.class);
            System.out.println("下单成功!");
            return "hello world"+msg;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    @RestController
    @RequestMapping("/stock")
    public class StockController {
        @RequestMapping("/reduct")
        public String reduct(){
            System.out.println("扣减库存");
            return "扣减库存服务";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述
    在这里插入图片描述
    以上是服务之间调用最简单的实现,针对一调多,多调一的情况,这种单点调用很不方便,而且面对服务迁移、高并发的情况也有弊端,因此引入nacos-服务注册管理工具。
    四、做一些配置
    step1
    nacos启动:
    在这里插入图片描述
    启动成功标志:
    在这里插入图片描述
    nacos客户端:
    用户名和密码均默认:nacos
    在这里插入图片描述
    在这里插入图片描述
    nacos-client的搭建:
    1.添加子项目中application.yaml的配置文件;
    2.添加子项目中pom.xml文件的依赖项;
    application.yaml内容如下:

    server:
      port: 8021
    # 应用名称 (nacos会将该名称当做服务名称)
    spring:
      application:
        name: stock-service
      cloud:
        nacos:
          server-addr: 127.0.0.1:8848
          discovery:
            username: nacos
            password: nacos
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    pom.xml内容如下:

            <!--nocos的服务注册发现-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
    
            <!--引入nacos config配置依赖-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    step1配置完毕后启动项目,控制台输出register finished,则该服务注册成功。
    在这里插入图片描述
    step2—nacos客户端查看服务列表,详情可查看监听端口,ip等信息
    在这里插入图片描述
    在这里插入图片描述

    step3—关闭子服务,停止心跳反馈,触发nacos保护机制
    在这里插入图片描述
    服务之间调用:
    一、模拟生产环境上存在多个相同服务,构建不同监听端口的多个服务
    在这里插入图片描述
    在这里插入图片描述
    二、order-service中调用stock-service服务:由之前ip换为服务名称

    @RestController
    @RequestMapping("/order")
    public class OrderController {
        @Autowired
        RestTemplate restTemplate;
        @RequestMapping("/add")
        public String add(){
            String msg = restTemplate.getForObject("http://stock-service/stock/reduct", String.class);
            System.out.println("下单成功!");
            return "hello world"+msg;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    三、将服务全部启动,可在nacos客户端看到服务集群
    在这里插入图片描述
    服务详情可查看具体监听端口:

    在这里插入图片描述
    四、查看服务调用情况:order-service以轮询的方式调用stock-service集群
    在这里插入图片描述
    在这里插入图片描述
    nacos管理界面:
    一、订阅者列表:
    在这里插入图片描述
    在这里插入图片描述
    二、服务详情-保护阈值
    可以通过application.yaml配置文件中设置为永久实例
    在这里插入图片描述
    在这里插入图片描述
    注册中心配置项解析
    采用配置文件application.yaml进行配置:

    server:
      port: 8021
    # 应用名称 (nacos会将该名称当做服务名称)
    # service: stock-service(也可以此配置)
    spring:
      application:
        name: stock-service
      cloud:
        nacos:
          server-addr: 127.0.0.1:8848
          discovery:
            username: nacos
            password: nacos
            # namespace: public  # 相同特征的服务进行归类分组管理
            ephemeral: false  # 默认=true(临时实例)  当服务宕机 超过心跳 就会将实例剔除掉
            #永久实例   哪怕宕机了也不会删除实例  当服务宕机 永远不会剔除掉
            #group: 默认DEFAULT_GROUP,相同特征的服务进行归类分组管理
            #weight:  通常要结合 安装 权重的负载均衡策略, 权重越高分配的流量就越大
            #metadata: version=1  可以结合元数据做扩展
            #cluster-name: XUSHU
            #service: 默认取{spring.application.name}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
  • 相关阅读:
    DO280管理应用部署--RC
    TOK六大新话题怎么整理思路?
    用数据观测Page Cache
    Java IO包之ByteArray和Filter的简介说明
    第三章作业【数据库原理】
    3.2 Redis的持久化机制-RDB
    shell原理
    uniapp溢出隐藏
    嵌入式Linux_驱动开发:offset宏和container_of宏
    Qt 中 setModel 设置数据类型和 setView 函数设置视图
  • 原文地址:https://blog.csdn.net/weixin_46343397/article/details/137512502