SpringCloud中服务间通信(应用间通信)-亲测有效-源码下载-连载2

news2024/11/24 18:49:00

1、微服务概述

本案例主要解决微服务之间的相互调用问题

如果已经理解什么是微服务,可以直接跳到实战。

本案例采用springBoot3.1.7+springCloud2022.0.4版本测试

本案例使用springboot2.7.x版本测试代码相同

1、微服务是分布式架构,那么为什么要需要使用分布式架构?

因为单体服务是将所有的模块都放在一个项目中,这种架构部署简单,维护方便,但是随着功能的增加各个模块之间的边界会越来越模糊(即使各个模块的融合会越来越密切),这就造成了一个问题如当修改订单服务的时候,可能会影响到商品系统、短信系统等,使程序的维护性降低等。且单体服务有性能瓶颈,越来越无法满足当今的互联网工程,这就出现了微服务。

2、微服务和springCloud之间的关系?

如果说springCloud就是微服务这是不正确的,springCloud其实是一个工具集,将解决微服务中出现的各种问题的插件集成到一起,形成了一个整套的解决方案,这些解决方案偏向于服务治理等。

除此之外还有很多的其他工具如springCloudAlibaba等,都是很好的解决微服务问题的工具。

3、什么是微服务?

微服务就是一种分布式架构,本质就是将单体服务拆分中一个一个的独立运行的小工程,这些小的工程如订单系统、商品系统等运行在不同的服务器中,这些独立运行的小工程就是微服务。

使用了微服务之后我们需要解决一些列的问题?

问题1:微服务之间怎么知道彼此的存在,我们可以通过注册中心将每个微服务的信息注册到注册中心,注册中心可以使用Eureka或Nacos等。

问题2:各个独立运行的微服务之间如何进行通信,我们可以使用RestTemplate或openfeign

问题3:当微服务特别多的时候,各个微服务都有配置文件,如何统一管理这些配置文件,我们可以使用配置中心,将配置都放置在同一个地方如git中,通过配置中心统一加载。

问题4:使用了微服务之后,就会出现在分布式系统下的一些问题,如分布式的id,分布式锁,分布式事务等问题,我们需要使用到分布式相关的技术。

问题5:使用了微服务之后,一个项目会出现很多的微服务,这个时候项目的部署是一个非常麻烦的事情,为了方便,我们可以使用Jekins等实现自动化部署等。

问题6:使用了微服务之后,我们的服务部署在不同的服务上,不同的IP和不同的端口会为我们的方位带来一定的困扰,这个时候我们可以使用网关服务如zuul,gateway等技术解决这些问题。

2、案例中的微服务结构

重点1:我们创建二个微服务,一个订单系统,一个商品系统,并将这两个系统注册到注册中心EurekaServer中。这个时候我们需要解决OrderServer订单系统与GoodsServer商品系统的通信问题,我们可以通过二中方式解决通信问题,第一:RestTemplate,第二:OpenFeign。

重点2:我们在GoodsServer商品系统中创建deductStock方法模拟减库存,在OrderServer订单系统中创建createOrder方法模拟创建订单。然后在createOrder中调用deductStock方法。

3、创建EurekaServer

3.1、创建工程并导入包信息

核心包:

spring-cloud-starter-netflix-eureka-server
spring-boot-starter-web

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.7</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.txc</groupId>
    <artifactId>eurekaserver0828</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>eurekaserver0828</name>
    <description>eurekaserver0828</description>
    <properties>
        <java.version>17</java.version>
        <spring-cloud.version>2022.0.4</spring-cloud.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.1.0</version>
            </plugin>

            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.txc.eurekaserver0828.Eurekaserver0828Application</mainClass>
                </configuration>
            </plugin>

        </plugins>
    </build>

</project>

3.2、在application.properties中配置注册中心信息

#注册中心端口号
server.port=8761
#注册中心地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
#是否将自己注册到Eureka-Server中,默认的为true
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
#为服务起一个别名
spring.application.name=eurekaserver

3.3、在启动类中添加注册中心服务配置

核心注解:@EnableEurekaServer

@SpringBootApplication
@EnableEurekaServer
public class Eurekaserver0828Application {

    public static void main(String[] args) {
        SpringApplication.run(Eurekaserver0828Application.class, args);
    }

}

3.4、访问Eureka注册中心监控页面

访问地址:http://localhost:8761/

此时注册中心中没有任何的微服务

主要参数含义介绍:

total-avail-memory:总可用内存

num-of-cpus:cpu数量

current-memory-usage:当前内存使用量

server-uptime:服务器正常运行时间

registerd-replicas:注册副本

available-replicas:可用副本

4、创建GoodsServer微服务并注册到注册中心中(服务注册)

服务注册:将微服务注册到Eureka Server中

4.1、创建GoodsServer工程并导包

核心包:

spring-cloud-starter-netflix-eureka-client
spring-boot-starter-web

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.7</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.txc</groupId>
    <artifactId>goodsserver</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>goodsserver</name>
    <description>goodsserver</description>
    <properties>
        <java.version>17</java.version>
        <spring-cloud.version>2022.0.4</spring-cloud.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <image>
                        <builder>paketobuildpacks/builder-jammy-base:latest</builder>
                    </image>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

4.2、创建GoodsServer配置信息

在application.properties中添加如下信息

server.port=8001
spring.application.name=goodsserver
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

4.3、在启动类中添加Eureka客户端注解

核心注解:@EnableDiscoveryClient

@SpringBootApplication
@EnableDiscoveryClient
public class GoodsserverApplication {

    public static void main(String[] args) {
        SpringApplication.run(GoodsserverApplication.class, args);
    }

}

4.4、创建测试方法

创建deductStock模拟减库存行为,接收一个String类型参数,返回String类型参数。

@Controller
public class GoodsController {

    @RequestMapping("/deductStock")
    @ResponseBody
    public String deductStock(String goodsCode){
        System.out.println(goodsCode+"=====goods deduct  success======");
        //模拟减库存
        return "库存减去成功";
    }

}

4.5、启动工程并查看Eureka Server注册中心信息

5、创建OrderServer微服务并注册到注册中心中

5.1、创建OrderServer工程并导包

核心包:

spring-cloud-starter-netflix-eureka-client
spring-boot-starter-web

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.7</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.txc</groupId>
    <artifactId>orderserver</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>orderserver</name>
    <description>orderserver</description>
    <properties>
        <java.version>17</java.version>
        <spring-cloud.version>2022.0.4</spring-cloud.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <image>
                        <builder>paketobuildpacks/builder-jammy-base:latest</builder>
                    </image>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

5.2、创建OrderServer工程配置信息

这个工程我特地使用了yml文件配置,本质与properties相同

GoodsServer工程使用8081端口,所以我们的OrderServer工程使用8082端口

server:
  port: 8082
spring:
  application:
    name: orderserver
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

5.3、在启动类中添加Eureka客户端注解

核心注解:@EnableDiscoveryClient

@SpringBootApplication
@EnableDiscoveryClient

public class OrderserverApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderserverApplication.class, args);
    }

}

5.4、创建createOrder测试方法

@Controller
public class OrderController {

    @RequestMapping("/createOrder")
    @ResponseBody
    public String createOrder(){
        System.out.println("=====order create  success=====");

        return "订单创建成功返回值。";
    }

}

5.5、启动工程并查看EurekaServer注册中心信息

6、实现OrderServer工程与GoodsServer工程通信(服务发现)

服务发现:就是通过RestTemplate和OpenFeign方式通信。

两个微服务通信的听着高大上,本质就是实现A工程中的方法调用B工程中的方法。在单体服务中可以直接通过new类调用方法的方式,微服务中稍微麻烦一些。

6.1、方式1:在OrderServer工程中调用deductStore方法

在OrderServer的createOrder方法中调用deductStore方法

这种调用方式的不足之处:无法使用高可用服务,只能指定访问8081端口。

@Controller
public class OrderController {

    @RequestMapping("/createOrder")
    @ResponseBody
    public String createOrder(){
        System.out.println("=====order create  success=====");
        //需要调用商品服务中的商品信息,扣除库存信息。
        RestTemplate restTemplate=new RestTemplate();
        String result=restTemplate.getForObject("http://localhost:8081/deductStock?goodsCode=1001",String.class);
        System.out.println("===result==="+result);

        return "订单创建成功返回值。";
    }

}

访问结果:

 测试地址:http://localhost:8082/createOrder?goodsCode=1001

6.2、方式2:在OrderServer工程中调用deductStore方法

这种方式能够适应高可用服务,使用到了LoadBalanced

第一步:在启动类中添加如下信息

@Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

@SpringBootApplication
@EnableDiscoveryClient
public class OrderserverApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderserverApplication.class, args);
    }

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

第二步:在控制类中使用

在调用的时候,不需要写具体的ip地址和port,而是直接写服务的名称,也就是GoodsServer工程中通过spring.application.name起的名字。

@Controller

public class OrderController {
    @Autowired
    RestTemplate restTemplate;

    @RequestMapping("/createOrder")
    @ResponseBody
    public String createOrder(){
        System.out.println("=====order create  success=====");
        //需要调用商品服务中的商品信息,扣除库存信息。
        //第一种
        /*RestTemplate restTemplate=new RestTemplate();
        String result=restTemplate.getForObject("http://localhost:8081/deductStock?goodsCode=1001",String.class);
        System.out.println("===result==="+result);*/
        //第二种
        String result=restTemplate.getForObject("http://GOODSSERVER/deductStock?goodsCode=1001",String.class);
        System.out.println("===result==="+result);
        return "订单创建成功返回值。";
    }

}

测试结果:

 测试地址:
 测试地址:http://localhost:8082/createOrder?goodsCode=1001

6.3、方式3:通过OpenFeign方式调用

OpenFeign方式调用能让开发者感觉在调用本地方法一样,体验较好。底层使用动态代理的方式实现,本质是基于HTTP的远程调用。

声明式REST客户端(伪RPC),采用基于接口的注解,内部使用ribbon做负载均衡—集群,能够达到仿佛调用本地方法的体验。

6.3.1、在OrderServer中加入OpenFeign的包信息

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>3.1.1</version>
        </dependency>

6.3.2、在启动类中配置OpenFeign注解启动

核心注解:@EnableFeignClients

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class OrderserverApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderserverApplication.class, args);
    }

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

6.3.3、在OrderServer中创建调用注解类

说明1:@FeignClient(name = "GOODSSERVER"):name的值必须等于调用的微服务goodsServer中spring.application.name定义的值
说明2:@RequestMapping("/deductStock"):括号中的名称必须等于调用的微服务中真实的请求的地址
@FeignClient(name = "GOODSSERVER")
public interface GoodsServerClients {
    @RequestMapping("/deductStock")
   public String deductStock(String goodsCode);
}

6.3.4、测试程序

测试地址:http://localhost:8082/createOrder?goodsCode=1001

7、源码下载

下载地址:https://download.csdn.net/download/tangshiyilang/88771218

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1404643.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity中URP下的SimpleLit的 BlinnPhong高光反射计算

文章目录 前言一、回顾Blinn-Phong光照模型1、Blinn-Phong模型&#xff1a; 二、URP下的SimpleLit的 BlinnPhong1、输入参数2、程序体计算 前言 在上篇文章中&#xff0c;我们分析了 URP下的SimpleLit的 Lambert漫反射计算。 Unity中URP下的SimpleLit的 Lambert漫反射计算 我…

计算机网络自顶向下Wireshark labs1-Intro

Wireshark labs1 实验文档&#xff1a;http://www-net.cs.umass.edu/wireshark-labs/Wireshark_Intro_v8.0.pdf 介绍 加深对网络协议的理解通常可以通过观察协议的运行和不断调试协议来大大加深&#xff0c;具体而言&#xff0c;就是观察两个协议实体之间交换的报文序列&…

DEB方式安装elastic search7以及使用

参考&#xff1a;https://www.cnblogs.com/anech/p/15957607.html 1、安装elastic search7 #手动下载安装 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.1-amd64.deb wget https://artifacts.elastic.co/downloads/elasticsearch/elastics…

R语言简介

1.R语言 R语言是一种数学编程语言&#xff0c;主要用于统计分析、绘图和数据挖掘。 2.R语言特点 免费、开源&#xff0c;兼容性好&#xff08;Windows、MacOS或Linux)。具有多种数据类型&#xff0c;如向量、矩阵、因子、数据集等常用数据结构。多用于交互式数据分析&#x…

Linux配置yum源以及基本yum指令

文章目录 一、yum介绍二、什么是软件包三、配置yum源四、一键配置yum源【三步走】五、yum指令搜索软件安装软件卸载软件 六、其他yum指令更新内核更新软件更新指定软件显示所有可更新的软件清单卸载指定包并自动移除依赖包删除软件包&#xff0c;以及软件包数据和配置文件 一、…

灵眸边缘计算产品学习

EASY EAI灵眸科技 | 让边缘AI落地更简单 (easy-eai.com) 产品简介 支持4路1080P30fps视频流采集&#xff0c;四核CPU1.5GHz与2Tops AI边缘算力能力。集成有以太网、Wi-Fi、4G等网络通信外设&#xff1b;RS232、RS485、UART等本地通信接口。HDMI显示屏接口、音频输入输出等交互…

打造出色的 Prometheus 监控系统,看完后薪资翻倍?

一、监控概念&误区 监控是管理基础设施和业务的核心工具&#xff0c;监控应该和应用程序一起构建和部署&#xff0c;没有监控&#xff0c;将无法了解你的系统运行环境&#xff0c;进行故障诊断&#xff0c;也无法阻止提供系统性的性能、成本和状态等信息。 误区&#xff1…

【江科大】STM32:(超级详细)定时器输出比较

文章目录 输出比较单元特点 高级定时器&#xff1a;均有4个通道 PWM简介PWM&#xff08;Pulse Width Modulation&#xff09;脉冲宽度调制输出比较通道PWM基本结构基本定时器 参数计算捕获/比较通道的输出部分详细介绍如下&#xff1a; 舵机介绍硬件电路 直流电机介绍&#xff…

C# 使用System.Threading.Timer 实现计时器

写在前面 以往一般都是用 System.Timers.Timer 来做计时器&#xff0c;而 System.Threading.Timer 也可以实现计时器功能&#xff0c;并且还可以配置首次执行间隔&#xff0c;在功能上比System.Timers.Timer更加丰富&#xff1b;根据这个特性就可以实现按指定时间间隔对委托进…

JDX图片识别工具1.0版本发布啦

软件介绍 软件核心功能软件界面软件下载软件教程 软件核心功能 工作当中经常处理大量的图片&#xff0c;网上搜索的工具都无法满足需求&#xff0c;因此自己研发批量图片识别工具。 目前还是内测版&#xff0c;1.0版本主要包含如下特性&#xff1a; 批量识别图片&#xff0c…

前端JS加密与Buspsuite的坦诚相待

前端JS加密测试场景下的困惑 在渗透测试过程中经常会遇到JS前端加密的场景&#xff0c;假如不借助任何工具的情况下&#xff0c;我们一般是把JS代码进行扣取&#xff0c;本地进行加解密生成Payload&#xff0c;然后在Burpsuite里进行Payload替换。这种方式就存在一个很明显的问…

自然语言处理--双向匹配算法

自然语言处理作业1--双向匹配算法 一、概述 双向匹配算法是一种用于自然语言处理的算法&#xff0c;用于确定两个文本之间的相似度或匹配程度。该算法通常使用在文本对齐、翻译、语义匹配等任务中。 在双向匹配算法中&#xff0c;首先将两个文本分别进行处理&#xff0c;然后…

使用Docker部署Apache Superset结合内网穿透实现远程访问本地服务

文章目录 前言1. 使用Docker部署Apache Superset1.1 第一步安装docker 、docker compose1.2 克隆superset代码到本地并使用docker compose启动 2. 安装cpolar内网穿透&#xff0c;实现公网访问3. 设置固定连接公网地址 前言 Superset是一款由中国知名科技公司开源的“现代化的…

操作系统导论-课后作业-ch14

1. 代码如下&#xff1a; #include <stdio.h> #include <stdlib.h>int main() {int *i NULL;free(i);return 0; }执行结果如下&#xff1a; 可见&#xff0c;没有任何报错&#xff0c;执行完成。 2. 执行结果如下&#xff1a; 3. valgrind安装使用参考&a…

决策树的基本构建流程

决策树的基本构建流程 决策树的本质是挖掘有效的分类规则&#xff0c;然后以树的形式呈现。 这里有两个重点&#xff1a; 有效的分类规则&#xff1b;树的形式。 有效的分类规则&#xff1a;叶子节点纯度越高越好&#xff0c;就像我们分红豆和黄豆一样&#xff0c;我们当然…

UI设计中的插画运用优势(下)

6. 插画赋予设计以美学价值&#xff0c;更容易被接受 即使所有人都在分析和争论产品的可用性和易用性&#xff0c;大家在对美的追求上&#xff0c;始终保持着一致的态度。一个设计是否具备可取性&#xff0c;是否能够通过甲方、客户和实际用户&#xff0c;是每个设计人都需要面…

微服务Spring Cloud架构详解

"Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具&#xff08;例如配置管理&#xff0c;服务发现&#xff0c;断路器&#xff0c;智能路由&#xff0c;微代理&#xff0c;控制总线&#xff09;。分布式系统的协调导致了样板模式, 使用Spring Cloud开…

c++QT文件IO

1、QFileDialog文件对话框 与QMessageBox一样&#xff0c;QFileDialog也继承了QDialog类&#xff0c;直接使用静态成员函数弹窗。弹出的结果&#xff08;选择文件的路径&#xff09;通过返回值获取。 1&#xff09;获取一个打开或保存的文件路径 // 获取一个打开或保存的文件路…

快速上手的AI工具-文心辅助学习

前言 大家好晚上好&#xff0c;现在AI技术的发展&#xff0c;它已经渗透到我们生活的各个层面。对于普通人来说&#xff0c;理解并有效利用AI技术不仅能增强个人竞争力&#xff0c;还能在日常生活中带来便利。无论是提高工作效率&#xff0c;还是优化日常任务&#xff0c;AI工…

MySQL>基础sql语句

阅读目录 1.进入数据库2.数据库操作&#xff08;增删改查用&#xff09;3.表操作(增删改查)4.语句操作(增删改查) 回到顶部 1.进入数据库 打开终端,输入&#xff1a; /usr/local/mysql/bin/mysql -uroot -p回车 输入密码&#xff1a; 回到顶部 2.数据库操作&#xff08;增…