Version: Next

订单模块构建

新建 module ,命名为 cloud-consumer-order80

pom.xml

  • 不需要持久层相关的模块,如 jdbc、druid、mybatis
pom.xml
<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>

application.yaml

  • 面向用户,一般使用 80 端口
application.yaml
server:
port: 80

主启动

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

业务类

实体类:偷懒直接复制之前 entities 下的两个类

Controller

  • 要实现 订单模块支付模块 的调用
  • 可以使用 Http Client,此处使用 RestTemplate,它是对前者的封装

RestTemplate

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

  • 使用 RestTemplate 访问 restful 接口非常简单粗暴
参数意义
urlREST 请求地址
requestMap请求参数
ResponseBean.classHTTP 响应转换成的对象

SpringBoot 使用 RestTemplate

  • 使用配置类注入 Bean
  • 新建 config.ApplicationContextConfig
spring配置类
@Configuration
public class ApplicationContextConfig {
@Bean
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
  • 编写 OrderController 使用 restTemplate.postForObject(..) 方法发送 POST 请求,.getForObject() 方法发送 GET 请求,分别调用 支付模块 的两个 Controller 方法
订单模块 Controller
@RestController
@Slf4j
public class OrderController {
private static final String PAYMENT_URL = "http://localhost:8081";
@Resource
private RestTemplate restTemplate;
/**
* 调用 支付模块 的 create 方法
*
* @param payment
* @return 调用结果
*/
@GetMapping("/consumer/payment/create")
public CommonResult<Integer> 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);
}
}

测试

  1. 启动两个 Spring Boot 项目

  2. 通过 POSTMAN 访问 http://127.0.0.1:80/consumer/payment/get/2

    响应
    {
    "code": 200,
    "message": "查询成功",
    "data": {
    "id": 2,
    "serial": "长大002"
    }
    }
  3. 通过 POSTMAN 访问 http://127.0.0.1:80/consumer/payment/create?serial=长达003

    响应
    {
    "code": 200,
    "message": "插入成功",
    "data": 1
    }

可见 order80 模块成功调用了 payment8001 模块