SpringCloudAlibaba入门学习笔记20240408~20240424

发布于:2024-04-28 ⋅ 阅读:(29) ⋅ 点赞:(0)
跟学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>

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

#order的服务端口
server:
  port: 8080
#stock的服务端口
server:
  port: 8011

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;
     }
}
@SpringBootApplication
public class StockApplication {
    public static void main(String[] args) {
        SpringApplication.run(StockApplication.class,args);
    }
}

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;
    }
}
@RestController
@RequestMapping("/stock")
public class StockController {
    @RequestMapping("/reduct")
    public String reduct(){
        System.out.println("扣减库存");
        return "扣减库存服务";
    }
}

在这里插入图片描述
在这里插入图片描述
以上是服务之间调用最简单的实现,针对一调多,多调一的情况,这种单点调用很不方便,而且面对服务迁移、高并发的情况也有弊端,因此引入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

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>

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

三、将服务全部启动,可在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}