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,运行项目

相关推荐
DaqunChen2 小时前
PHP怎么实现单例模式_PHP常用设计模式之单例模式【方法】
jvm·数据库·python
2301_803538952 小时前
Matplotlib 动画中多子图更新失效的解决方案
jvm·数据库·python
一只大袋鼠3 小时前
MySQL 进阶:聚集函数、分组、约束、多表查询
开发语言·数据库·mysql
hef28810 小时前
如何生成特定SQL的AWR报告_@awrsqrpt.sql深度剖析单条语句性能
jvm·数据库·python
xcjbqd011 小时前
Python API怎么加Token认证_JWT生成与验证拦截器实现
jvm·数据库·python
二月十六12 小时前
SQL Server 2022 新语法:IS [NOT] DISTINCT FROM 彻底解决 NULL 比较难题
数据库·sqlserver
~ rainbow~12 小时前
前端转型全栈(四)——常见的错误及解决方案
数据库·oracle·全栈
数厘12 小时前
2.1SQL 学习:先懂数据库概念再学 SQL
数据库·sql·学习
Cat_Rocky12 小时前
redis哨兵模式
数据库·redis