spring cloud 简单了解

1,学习spring cloud

1.1SpringCloud是什么?

Spring Cloud是一系列框架的有序集合如服务发现注册、配置中心、消息总线、负载均衡、熔断器、数据监控等。

1.2.Spring Cloud 和 Spring Boot的关系

Spring boot 是 Spring 的一套快速配置脚手架 ,可以基于spring boot 快速开发单个微服务

Spring Cloud是一个基于SpringBoot实现的微服务开发方案;

Spring boot可以离开Spring Cloud独立使用开发项目,但是Spring Cloud离不开Springboot,属于依赖的关系。

2.系统架构的演变

2.1. 单体架构

1迭代困难 :每次功能的变更或bug的修复都会导致重新部署整个应用

2代码耦合 :项目之间耦合度较高 后期整改困难

3扩展受限: 单独为某一块业务进行扩展 ,无法根据业务模块的需要进行伸缩

4技术债务:随着时间推移、需求变更和人员更迭,会逐渐形成应用程序的技术债务 代码复杂的提升

2.2.分布式架构

分布式:需要按照功能点把系统拆分成独立的功能,单独为某一个节点添加服务器,需要系统之间配合才能完成整个业务逻辑

2.3.微服务

微服务是一种经过良好架构设计的分布式架构方案,微服务架构特征:

  • 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责,避免重复业务开发

  • 面向服务:微服务对外暴露业务接口

  • 自治:团队独立、技术独立、数据独立、部署独立

  • 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题

3.Spring Cloud Alibaba概述

同 Spring Cloud 一样,Spring Cloud Alibaba 也是一套微服务解决方案,包含开发微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。

4,项目实践

如何跨项目进行调用(不包含依赖关系)???

1,下载nacos

需要在虚拟机当中下载 Nacos 进入它网页

Nacos (全称: Dynamic Naming and Configuration Service ) 是阿里巴巴开源的微服务基础设施 ,核心是服务注册发现 + 分布式配置中心,相当于微服务架构的 "通讯录 + 集中控制面板"

Nacos账号密码/nacos /nacos

接下来就是安装依赖 (依赖版本需要统一)

java 复制代码
  <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-commons</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
依赖 作用
spring-cloud-commons Spring Cloud 微服务标准接口
spring-cloud-starter-alibaba-nacos-discovery Nacos 注册发现实现

2,导入nacos地址

同时需要在两个项目当中 写application.yml

java 复制代码
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.182.132:8848 #nacos服务的地址
  application:
    name: nacos-provider //项目名字

3,运行

调用者

controller

java 复制代码
@RestController
@RequestMapping(value = "/consumer")
public class ConsumerController {

    @Autowired
    //RestTemplate restTemplate:
    // Spring 提供的用于发送 HTTP 请求的客户端工具类
    private RestTemplate restTemplate;
    @Autowired
    // 用于发现服务实例的客户端 (Eureka、Consul等)
    private DiscoveryClient discoveryClient;
    @RequestMapping("/getUserById/{id}")
    //@PathVariable 获取路径中的参数
    public User getUserById(@PathVariable Integer id) {
//        discoveryClient.getInstances("nacos-provider");//获取服务实例
        ServiceInstance serviceInstance = discoveryClient.getInstances("nacos-provider").get(0);
        String host = serviceInstance.getHost();//获取服务实例的ip
        Integer port = serviceInstance.getPort();//获取服务实例的端口号

//        String url ="http://127.0.0.1:8080/provider/getUserById/"+id; //需要访问的uid
        String url ="http://"+host+":"+port+"/provider/getUserById/"+id;
       return  restTemplate.getForObject(url,User.class);
    }
}

启动类 需要添加 @EnableDiscoveryClient

开启服务注册与发现功能 让当前 Spring Boot 项目成为微服务客户端,自动把自己注册到 Nacos/Eureka 等注册中心,同时能发现其他微服务。

java 复制代码
@SpringBootApplication
@EnableDiscoveryClient // 服务注册
public class NacosConsumerApp {
    public static void main(String[] args) {
        SpringApplication.run(NacosConsumerApp.class, args);
    }
}

启动后在nacos 网页可以发现

进入调用者的 访问路径 进去就是 被调用者的 的路径内容

5,Nacos配置中心 config

项目工程

1,导入依赖

java 复制代码
 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-commons</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

2,启动类

3,bootstrap.yml

4,导入配置

其中配置内容

Data Id:prefix+file-extension

配置格式:yaml

配置内容:...

5,运行项目

相关推荐
TheRouter12 分钟前
AI Agent 记忆体系建设实战:短期、长期与工作记忆的工程实现
数据库·人工智能·oracle
Omics Pro19 分钟前
首个!外源天然产物综合性代谢图谱
数据库·人工智能·算法·机器学习·r语言
唐青枫26 分钟前
MySQL EXISTS 详解:存在性判断、NOT EXISTS 与实战示例
sql·mysql
JAVA面经实录9171 小时前
Hibernate面试题库
数据库·oracle·hibernate
2301_773643622 小时前
华为云存储实验
网络·mysql·华为云
迷枫7122 小时前
DM8 目录结构与常用排查入口梳理
服务器·数据库
Mr.Daozhi3 小时前
RAG 进阶实战:跑通 Demo 后我连续翻了 6 次车,逐一修复才真正可用(含 Gradio Web 版)
前端·数据库·langchain·大模型·gradio·rag·科研工具
小程故事多_803 小时前
Claude Code自定义workflow skills用法
数据库·人工智能·智能体
大鹏说大话3 小时前
SQL 排序与分组实战:解决“分组后取最新数据“
android·java·数据库
quan26313 小时前
20260529,日常开发-数据库主从问题
java·mysql·主从·延迟