微服务基础知识

1、微服务基础知识

1.1 系统架构的演变

随着互联⽹的发展,⽹站应⽤的规模不断扩⼤,常规的应⽤架构已⽆法应对,分布式服务架构以及微服 务架构势在必⾏,必需⼀个治理系统确保架构有条不紊的演进。

1.1.1 单体应用架构

Web应⽤程序发展的早期,⼤部分web⼯程(包含前端⻚⾯,web层代码,service层代码,dao层代码)是将所有的功能模块,打包到⼀起并放在⼀个web容器中运⾏

比如搭建⼀个电商系统:客户下订单,商品展示,⽤户管理。这种将所有功能都部署在⼀个web容器中 运行的系统就叫做单体架构。

优点

①所有功能集成在一个项目工程中

项目架构简单,前期开发成本低,周期短,适合小型项目

缺点

①全部功能集成在⼀个⼯程中,对于大型项目不易开发、扩展及维护。

②系统性能扩展只能通过扩展集群结点,成本⾼、有瓶颈。

③技术栈受限。

1.1.2 垂直应用架构

当访问量逐渐增⼤,单⼀应⽤增加机器带来的加速度越来越⼩,将应⽤拆成互不相⼲的⼏个应⽤,以提升效率

优点

①项⽬架构简单,前期开发成本低,周期短,⼩型项⽬的⾸选。

②通过垂直拆分,原来的单体项⽬不⾄于⽆限扩⼤

不同的项⽬可采⽤不同的技术。

缺点

①全部功能集成在⼀个⼯程中,对于⼤型项⽬不易开发、扩展及维护。

②系统性能扩展只能通过扩展集群结点,成本⾼、有瓶颈。

1.1.3 分布式SOA架构

SOA 全称为 Service-Oriented Architecture,即⾯向服务的架构。它可以根据需求通过⽹络对松散耦合的粗粒度应⽤组件(服务)进⾏分布式部署、组合和使⽤。⼀个服务通常以独⽴的形式存在于操作系统进程中。

站在功能的⻆度,把业务逻辑抽象成可复⽤、可组装的服务,通过服务的编排实现业务的快速再⽣,⽬ 的:把原先固有的业务功能转变为通⽤的业务服务,实现业务逻辑的快速复⽤

通过上⾯的描述可以发现 SOA 有如下⼏个特点:分布式、可重⽤、扩展灵活、松耦合

当垂直应⽤越来越多,应⽤之间交互不可避免,将核⼼业务抽取出来,作为独⽴的服务,减少代码冗余,逐渐形成稳定 的服务中⼼,使前端应⽤能更快速的响应多变的市场需求

优点

抽取公共的功能为服务,提⾼开发效率

②对不同的服务进⾏集群化部署解决系统压⼒

③基于ESB/DUBBO减少系统耦合

缺点

①抽取服务的粒度较⼤

②服务提供⽅与调⽤⽅接⼝耦合度较⾼

1.1.4 微服务架构

优点

通过服务的原⼦化拆分,以及微服务的独⽴打包、部署和升级,⼩团队的交付周期将缩短,运维成本也将⼤幅度下降

②微服务遵循单⼀原则。微服务之间采⽤Restful等轻量协议传输。

缺点

微服务过多,服务治理成本⾼,不利于系统维护

②分布式系统开发的技术成本⾼(容错、分布式事务等)

1.1.5 SOA与微服务的关系

SOA( Service Oriented Architecture )"⾯向服务的架构":他是⼀种设计⽅法,其中包含多个服务, 服务之间通过相互依赖最终提供⼀系列的功能。 ⼀个服务通常以独⽴的形式存在与操作系统进程中。各 个服务之间通过⽹络调⽤。

微服务架构:其实和SOA 架构类似,微服务是在SOA上做的升华,微服务架构强调的⼀个重点是"业务需 要 彻底的组件化和服务化" ,原有的单个业务系统会拆分为多个可以独⽴开发、设计、运⾏的⼩应⽤。 这些⼩应⽤之间通过服务完成交互和集成。

1.2常⻅微服务框架

1.2.1 SpringCloud

Spring Cloud是⼀系列框架的有序集合。它利⽤Spring Boot的开发便利性巧妙地简化了分布式系统基 础设施的开发,如服务发现注册、配置中⼼、消息总线、负载均衡、断路器、数据监控等,都可以⽤ Spring Boot的开发⻛格做到⼀键启动和部署。 Spring Cloud并没有重复制造轮⼦,它只是将⽬前各家 公司开发的⽐较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot⻛格进⾏再封装屏蔽掉 了复杂的配置和实现原理,最终给开发者留出了⼀套简单易懂、易部署和易维护的分布式系统开发⼯具 包

1.2.2 ServiceComb

Apache ServiceComb是业界第⼀个Apache微服务顶级项⽬, 是⼀个开源微服务解决⽅案,致⼒于帮助 企业、⽤户和开发者将企业应⽤轻松微服务化上云,并实现对微服务应⽤的⾼效运维管理。其提供⼀站 式开源微服务解决⽅案,融合SDK框架级、 0侵⼊ServiceMesh场景并⽀持多语⾔

1.2.3 ZeroC ICE

ZeroC IceGrid是ZeroC公司的杰作,继承了CORBA的⾎统,是新⼀代的⾯向对象的分布式系统中间件。 作为⼀种微服务架构,它基于RPC框架发展⽽来,具有良好的性能与分布式能⼒

2、SpringCloud概述

2.1 微服务中的相关概念

2.1.1 服务注册与发现

服务注册:服务实例将⾃身服务信息注册到注册中⼼。这部分服务信息包括服务所在主机IP和提供服务 的Port ,以及暴露服务⾃身状态以及访问协议等信息。

服务发现:服务实例请求注册中⼼获取所依赖服务信息。服务实例通过注册中⼼,获取到注册到其中的 服务实例的信息,通过这些信息去请求它们提供的服务。

2.1.2 负载均衡

负载均衡是⾼可⽤⽹络基础架构的关键组件,通常⽤于将⼯作负载分布到多个服务器来提⾼⽹站、应⽤、数据库或其他服务的性能和可靠性。

2.1.3 熔断

熔断这⼀概念来源于电⼦⼯程中的断路器(Circuit Breaker)。在互联⽹系统中,当下游服务因访问压 ⼒过⼤⽽响应变慢或失败,上游服务为了保护系统整体的可⽤性,可以暂时切断对下游服务的调⽤。这 种牺牲局部,保全整体的措施就叫做熔断。

2.1.4 链路追踪

随着微服务架构的流⾏,服务按照不同的维度进⾏拆分,⼀次请求往往需要涉及到多个服务。互联⽹应 ⽤构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使⽤不同的编程语⾔ 来实现、有可能布在了⼏千台服务器,横跨多个不同的数据中⼼。因此,就需要对⼀次请求涉及的多个 服务链路进⾏⽇志记录,性能监控即链路追踪

2.1.5 API⽹关

API⽹关直⾯意思是将所有API调⽤统⼀接⼊到API⽹关层,由⽹关层统⼀接⼊和输出。 ⼀个⽹关的基本 功能有:统⼀接⼊、安全防护、协议适配、流量管控、⻓短链接⽀持、容错能⼒。有了⽹关之后,各个 API服务提供团队可以专注于⾃⼰的的业务逻辑处理,⽽API⽹关更专注于安全、流量、路由等问题

2.2 SpringCloud的介绍

Spring Cloud是⼀系列框架的有序集合。它利⽤Spring Boot的开发便利性巧妙地简化了分布式系统基 础设施的开发,如服务发现注册、配置中⼼、消息总线、负载均衡、断路器、数据监控等,都可以⽤ Spring Boot的开发⻛格做到⼀键启动和部署。 Spring Cloud并没有重复制造轮⼦,它只是将⽬前各家 公司开发的⽐较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot⻛格进⾏再封装屏蔽掉 了复杂的配置和实现原理,最终给开发者留出了⼀套简单易懂、易部署和易维护的分布式系统开发⼯具 包

2.3 SpringCloud的架构

2.3.1 SpringCloud中的核⼼组件

Spring Cloud的本质是在 Spring Boot 的基础上,增加了⼀堆微服务相关的规范,并对应⽤上下⽂进⾏ 了功能增强。既然 Spring Cloud 是规范,那么就需要去实现,⽬前Spring Cloud 规范已有 Spring官 ⽅,Spring Cloud Netflix ,Spring Cloud Alibaba等实现。通过组件化的⽅式,Spring Cloud将这些实 现整合到⼀起构成全家桶式的微服务技术栈。

Spring Cloud Netflix组件:

|---------|---------|
| 组件名称 | 作⽤ |
| Eureka | 服务注册中⼼ |
| Feign | 声明式服务调⽤ |
| Ribbon | 客户端负载均衡 |
| Hystrix | 客户端容错保护 |
| Zuul | API服务⽹关 |

Spring Cloud Alibaba组件:

|---------|---------|
| 组件名称 | 作⽤ |
| Nacos | 服务注册中⼼ |
| Sentine | 客户端容错保护 |

Spring Cloud原⽣及其他组件:

|---------------|---------|
| 组件名称 | 作⽤ |
| Consu | 服务注册中⼼ |
| Config | 分布式配置中⼼ |
| Gateway | API服务⽹关 |
| Sleuth/Zipkin | 分布式链路追踪 |

3、案例搭建

使⽤微服务架构的分布式系统,微服务之间通过⽹络通信。我们通过服务提供者与服务消费者来描述微服 务间的调⽤关系。

我们以电商系统中常⻅的⽤户下单为例,⽤户向订单微服务发起⼀个购买的请求。在进⾏保存订单之前 需要调⽤商品微服务查询当前商品库存,单价等信息。在这种场景下,订单微服务就是⼀个服务消费 者,商品微服务就是⼀个服务提供者:

3.1 数据库表

我们需要用到以下三个表:

3.2 服务模块

创建公共⽗模块

springcloud_alibaba:此模块需要导入本次微服务所有模块所需的所有坐标:

XML 复制代码
<?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>
    <!-- 项目基本信息 -->
    <groupId>com.apesource</groupId>
    <artifactId>springcloud_alibaba_8_19</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>
    </dependencies>
    <name>springcloud_alibaba_8_19</name>
    <description>Demo project for Spring Boot</description>
    <!-- pom:父文件 -->
    <packaging>pom</packaging>
    <!-- 父项目的子模块 -->
    <modules>
        <module>shop_common</module>
        <module>shop_user</module>
        <module>shop_product</module>
        <module>shop_order</module>
    </modules>
    <!-- 父工程 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
    </parent>
    <!-- 依赖版本的锁定 -->
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
        <spring-cloud-alibaba.version>2.1.1.RELEASE</spring-cloud-alibaba.version>
    </properties>
    <!--
        dependencyManagement所包含的坐标,子项目不会直接继承,需要声明才可继承
         -->
    <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>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

//dependencyManagement 所包含的坐标,子项目不会直接继承,需要声明才可继承

创建公共模块

shop_common: ⽤于存放公共的实体类和⼯具类

//1.公共实体类(Order、Product、User)

//1.1 Order

java 复制代码
//订单
@TableName("shop_order")
@Data
public class Order {
    @TableId(value = "oid",type = IdType.AUTO)
    private Long oid;//订单id

    //用户
    @TableField("uid")
    private Integer uid;//用户id
    @TableField("username")
    private String username;//用户名

    //商品
    @TableField("pid")
    private Integer pid;//商品id
    @TableField("pname")
    private String pname;//商品名称
    @TableField("pprice")
    private Double pprice;//商品单价

    //数量
    @TableField("number")
    private Integer number;//购买数量
}

//1.2 Product

java 复制代码
//商品
@TableName(value = "shop_product")
@Data
public class Product {
    @TableId(value = "pid",type = IdType.AUTO)
    private Integer pid;//主键
    @TableField("pname")
    private String pname;//商品名称
    @TableField("pprice")
    private Double pprice;//商品价格
    @TableField("stock")
    private Integer stock;//库存
}

//1.3 User

java 复制代码
//用户
@TableName(value = "shop_user")
@Data
public class User {
    @TableId(value = "uid",type = IdType.AUTO)
    private Integer uid;//主键
    @TableField("username")
    private String username;//用户名
    @TableField("password")
    private String password;//密码
    @TableField("telephone")
    private String telephone;//手机号
}

//2.pom.xml文件

XML 复制代码
<?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">

	<parent>
		<groupId>com.apesource</groupId>
		<artifactId>springcloud_alibaba_8_19</artifactId>
		<version>1.0-SNAPSHOT</version>
	</parent>
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.apesource</groupId>
	<artifactId>shop_common</artifactId>
	<version>1.0-SNAPSHOT</version>

	<!-- 依赖 -->
	<dependencies>
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<version>3.4.3</version>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.12</version>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.56</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.16</version>
		</dependency>
	</dependencies>
</project>

创建订单微服务模块

shop_order :端⼝号为809X

//1.配置文件(application.yml)

XML 复制代码
server:
  port: 8091
spring:
  application:
    name: service-order
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql:///testdb?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
    username: root
    password: 123456

//2.pom.xml文件

XML 复制代码
<?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">

    <parent>
        <groupId>com.apesource</groupId>
        <artifactId>springcloud_alibaba_8_19</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.apesource</groupId>
    <artifactId>shop_order</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>shop_order</name>
    <description>Demo project for Spring Boot</description>

    <dependencies>
    <!-- springboot-web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- shop-common -->
    <dependency>
        <groupId>com.apesource</groupId>
        <artifactId>shop_common</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    </dependencies>
</project>

//3.搭建三层架构

//3.1 controller层--->OrderController类

java 复制代码
@RestController
public class OrderController {
    @Autowired
    private RestTemplate restTemplate;
    @Autowired
    private IOrderService orderService;
    //下单
    @RequestMapping("/order/prod/{pid}")
    public Order order(@PathVariable("pid") Integer pid){
        //调用商品微服务,查询商品信息
        Product product=restTemplate.getForObject(
                        "http://localhost:8081/product/"+pid,Product.class);
        //下单(创建订单)
        Order order = new Order();
        order.setUid(1);
        order.setUsername("测试用户");
        order.setPid(pid);
        order.setPname(product.getPname());
        order.setPprice(product.getPprice());
        order.setNumber(1);
        orderService.createOrder(order);
        return order;

    }

在OrderController类中使用了RestTemplate调用微服务(详细介绍见3.3)

//3.2 dao层--->OrderMapper接口

java 复制代码
@Mapper
public interface OrderMapper extends BaseMapper<Order> {
}

//3.3 service层--->OrderServiceImpl实现类

--->IOrderService接口

java 复制代码
public interface IOrderService extends IService<Order> {

    //创建订单
    void createOrder(Order order);
}
java 复制代码
@Service
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements IOrderService {

    @Autowired
    private OrderMapper orderMapper;

    @Override
    public void createOrder(Order order) {
        orderMapper.insert(order);
    }
}

//4.服务类

java 复制代码
@SpringBootApplication
public class ShopOrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ShopOrderApplication.class, args);
    }
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

创建商品微服务模块

shop_product :端⼝808X

//1.pom.xml文件

XML 复制代码
<?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>com.apesource</groupId>
        <artifactId>springcloud_alibaba_8_19</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <groupId>com.apesource</groupId>
    <artifactId>shop_product</artifactId>


    <dependencies>
        <!-- springboot-web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- shop-common -->
        <dependency>
            <groupId>com.apesource</groupId>
            <artifactId>shop_common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>

//2.配置yml文件

XML 复制代码
server:
  port: 8081
spring:
  application:
    name: service-product
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql:///testdb?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
    username: root
    password: 123456

//3.搭建三层架构

//3.1 controller--->ProductController类

java 复制代码
@RestController
public class ProductController {

    @Autowired
    private IProductService productService;

    //商品信息查询
    @RequestMapping("/product/{pid}")
    public Product product(@PathVariable("pid") Integer pid) {
        Product product = productService.getById(pid);
        return product;
    }

}

//3.2 dao层---> ProductMapper接口

java 复制代码
@Mapper
public interface ProductMapper extends BaseMapper<Product> {
}

//3.3 service层--->IProductService接口

java 复制代码
public interface IProductService extends IService<Product> {

}

--->ProductServiceImpl实现类

java 复制代码
@Service
public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements IProductService {

}

//4.服务类

XML 复制代码
@SpringBootApplication
public class ShopProductApplication {

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

}

创建⽤户微服务模块

shop_user: 端⼝807X

//1.pom.xml文件

XML 复制代码
<?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>com.apesource</groupId>
        <artifactId>springcloud_alibaba_8_19</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <groupId>com.apesource</groupId>
    <artifactId>shop_user</artifactId>

    <dependencies>
        <!-- springboot-web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- shop-common -->
        <dependency>
            <groupId>com.apesource</groupId>
            <artifactId>shop_common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>

//2.yml配置文件

XML 复制代码
server:
  port: 8071
spring:
  application:
    name: service-user
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql:///testdb?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
    username: root
    password: 123456

//3.三层架构

//3.1 controller层---> UserController类

java 复制代码
@RestController
public class UserController {

    @Autowired
    private IUserService userService;
}

//3.2 dao层--->UserMapper接口

java 复制代码
@Mapper
public interface UserMapper extends BaseMapper<User> {
}

//3.3 service层 ---> IUserService接口

java 复制代码
public interface IUserService extends IService<User> {
}

--->UserServiceImel实现类

java 复制代码
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService{

}

3.3 服务调⽤

3.5.1 RestTemplate介绍

Spring框架提供的RestTemplate类可⽤于在应⽤中调⽤rest服务,它简化了与http服务的通信⽅式,统 ⼀了RESTful的标准,封装了http链接, 我们只需要传⼊url及返回值类型即可。相较于之前常⽤的 HttpClient ,RestTemplate是⼀种更优雅的调⽤RESTful服务的⽅式。

在Spring应⽤程序中访问第三⽅REST服务与使⽤Spring RestTemplate类有关。 RestTemplate类的设 计 原则与许多其他Spring 模板类(例如JdbcTemplate、JmsTemplate)相同,为执⾏复杂任务提供了⼀ 种具有默认⾏为的简化⽅法。

RestTemplate默认依赖JDK提供http连接的能⼒(HttpURLConnection),如果有需要的话也可以通过 setRequestFactory⽅法替换为例如 Apache HttpComponents、 Netty或OkHttp等其它HTTP library。 考虑到RestTemplate类是为调⽤REST服务⽽设计的,因此它的主要⽅法与REST的基础紧密相连就不⾜ 为奇了,后者是HTTP协议的⽅法:HEAD、GET、 POST、 PUT、 DELETE和OPTIONS。例如, RestTemplate类具有headForHeaders()、getForObject()、 postForObject()、 put()和delete()等⽅ 法。

3.5.2 RestTemplate⽅法介绍

启动order服务类,通过http:localhost:8091/order/prod/20访问数据:

//我们查看 shop-order表,发现下单任务成功:

相关推荐
星晨雪海24 分钟前
企业标准 DTO 传参 + Controller + Service + 拷贝工具类完整版
java·开发语言·python
小猿姐2 小时前
# KubeBlocks for MSSQL 高可用实现
数据库·架构·sql server
pshdhx_albert7 小时前
AI agent实现打字机效果
java·http·ai编程
古译汉书8 小时前
【IoT死磕系列】Day 9:架构一台“自动驾驶物流车”,看8种协议如何协同作战
网络·arm开发·单片机·物联网·tcp/ip·架构·自动驾驶
沉鱼.448 小时前
第十二届题目
java·前端·算法
KaneLogger8 小时前
从传统笔记到 LLM 驱动的结构化 Wiki
人工智能·程序员·架构
斯外戈的小白9 小时前
【Agent】LangChain 1.0架构
架构·langchain
赫瑞9 小时前
数据结构中的排列组合 —— Java实现
java·开发语言·数据结构
小橘子8319 小时前
(学习)Claude Code 源码架构深度解析
学习·程序人生·架构
周末也要写八哥10 小时前
多进程和多线程的特点和区别
java·开发语言·jvm