【SpringCloud04】订单-支付微服务模块(消费者订单模块)

时间:2023-01-12 17:54:22

1.建cloud-consumer-order80

【SpringCloud04】订单-支付微服务模块(消费者订单模块)

2.改pom

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.atguigu.springcloud</groupId>
        <artifactId>cloud2022</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>cloud-consumer-order80</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </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>
</project>

3.写yml

server:
  port: 80

4.主启动

package com.atguigu.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * 简要描述
 *
 * @Author: ASuLe
 * @Date: 2023/1/11 20:17
 * @Version: 1.0
 * @Description: 文件作用详细描述....
 */
@SpringBootApplication
public class OrderMain80 {
    public static void main(String[] args) {
        SpringApplication.run(OrderMain80.class,args);
    }
}

5.业务类

问题1: 客户端是否需要controller层、service层、dao层吗?
回答: 不需要,只需要controller。
原因: 消费者调用8001提供者,提供服务的是8001,类似于同学不懂Java才找老师学习Java,这里老师就是教学服务的提供者,所以只应该有个controller,至于service和dao,不可能,因为你不可能操作提供者的数据库。

问题2: 但是order80和payment8001是不同的服务,该怎么调用呢?
解决1: 最原始web阶段使用HttpClient
解决2: 现在用restTemplate

【SpringCloud04】订单-支付微服务模块(消费者订单模块)

5.1entities

主实体类Payment,Json封装体CommonResult类可直接复制

5.2RestTemplate

RestTemplate是什么

RestTemplate提供了多种便捷访问远程Http服务的方法,是一种简单便捷的restful服务模板类,是Spring提供的用于访问Rest服务的客户端模板工具集

RestTemplate官网及使用

RestTemplate官网地址
使用:
使用RestTemplate非常简单

  • url:REST请求地址
  • requestMap:请求参数
  • ResponseBean.class:HTTP响应转换被转换成的对象类型

5.3config配置类

位置
【SpringCloud04】订单-支付微服务模块(消费者订单模块)

package com.atguigu.springcloud.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

/**
 * 简要描述
 *
 * @Author: ASuLe
 * @Date: 2023/1/11 20:34
 * @Version: 1.0
 * @Description: 文件作用详细描述....
 */
@Configuration
public class ApplicationContextConfig {

    //@Bean相当于applicationContext.xml <bean id="" class=""/>
    @Bean
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }

}

5.4controller

package com.atguigu.springcloud.controller;

import com.atguigu.springcloud.entities.CommonResult;
import com.atguigu.springcloud.entities.Payment;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;

/**
 * 简要描述
 *
 * @Author: ASuLe
 * @Date: 2023/1/11 20:23
 * @Version: 1.0
 * @Description: 文件作用详细描述....
 */
@RestController
@Slf4j
public class OrderController {

    public static final String PAYMENT_URL = "http://localhost:8001";

    @Resource
    private RestTemplate restTemplate;

    //这里是客户端都是发送GetMapping请求
    @GetMapping("/consumer/payment/create")
    public CommonResult<Payment> create(Payment payment) {
        return restTemplate.postForObject(PAYMENT_URL + "/payment/create", payment, CommonResult.class);
    }

    @GetMapping("/consumer/payment/get/{id}")
    public CommonResult<Payment> getPayment(@PathVariable("id") Long id) {

        return restTemplate.getForObject(PAYMENT_URL + "/payment/get/" + id, CommonResult.class);
    }


}

service服务控制台
【SpringCloud04】订单-支付微服务模块(消费者订单模块)

6.测试

6.1测试查询

【SpringCloud04】订单-支付微服务模块(消费者订单模块)

查询成功

6.2测试插入

【SpringCloud04】订单-支付微服务模块(消费者订单模块)

看似插入成功,真的是这样吗?
如下图所示,插入的数据有主键,但是无内容

【SpringCloud04】订单-支付微服务模块(消费者订单模块)
不要忘记@RequestBody注解
【SpringCloud04】订单-支付微服务模块(消费者订单模块)
再次尝试插入

【SpringCloud04】订单-支付微服务模块(消费者订单模块)
数据库中含有数据,插入成功
【SpringCloud04】订单-支付微服务模块(消费者订单模块)