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

相关推荐
苍煜1 天前
一篇讲懂分库分表:概念、spirngboot实战
数据库·oracle
梦想画家1 天前
PostgreSQL 物化视图实战:从数据固化到智能刷新的全链路指南
数据库·postgresql·物化视图
weoptions1 天前
简单sql注入中如何通过简单语句判断注入类型&注入方法
数据库·sql
小短腿的代码世界1 天前
Qt数据库编程深度解析:从SQL基础到ORM架构设计
数据库·sql·qt
Database_Cool_1 天前
在 RDS PostgreSQL 中实现 RaBitQ 量化
数据库·阿里云·ai·postgresql
【心态好不摆烂】1 天前
MySQL操作库
数据库·mysql
Javatutouhouduan1 天前
Java小白如何快速玩转Redis?
java·数据库·redis·分布式锁·java面试·后端开发·java程序员
Lyyaoo.1 天前
Redisson
数据库·缓存
网络工程小王1 天前
【LCEL 链式调用详解】调用篇-2
java·服务器·前端·数据库·人工智能
道法自然,人法天1 天前
PostgreSQL安装与初始化教程(二进制压缩包)
数据库·postgresql