模块名:cloud-consumer-order80
这里模拟用户端下订单,所以服务端口直接80
步骤和支付模块一样
- 建module
- 改pom
- 写yml
- 主启动
- 业务类
代码:
一、建module
这里忽略、参考前面支付模块的建立
二、改pom
- pom.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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>cloud2020</artifactId>
<groupId>com.atguigu.springcloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-consumer-order80</artifactId>
<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>
三、写yml
- application.yml
server:
port: 80
四、主启动
- OrderMain80 启动类
package com.atguigu.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @Author: 肖玉龙
* @Date: 2020/8/16 15:54
* @Email: 493820798@qq.com
* @phone: 17673115513
* @Version 1.0
*/
@SpringBootApplication
public class OrderMain80 {
public static void main(String[] args) {
SpringApplication.run(OrderMain80.class,args);
}
}
五、业务类
- 建实体类
由于我们这里是假设消费者的订单模块,直接调用支付模块的服务不在这做数据库操作,所以不写dao、service层
需要用到上面的支付模块实体类,直接将支付模块的entities文件夹及类一起拷过来
到时候会把实体类与工具类抽取出来做公共组件项目
- 配置使用restTemplate
在没有引入其它springcloud组件前
由于我们现在需要两个服务之间的调用,所以我们需要用到restTemplate进行服务间横向调用
后续会替换
restTemplate介绍:
RestTemplate提供了多种便捷访问远程Http服务的方法,是一种简单便捷的访问restful服务模板类,是Spring提供的用于访问Rest服务的客户端模板工具集
使用restTemplate访问restful接口非常的简单粗暴无脑。
(url,requestMap,ResponseBean.class)这三个参数分别代表
REST请求地址、请求参数、HTTP响应转换被转换成的对象类型。
接下来我们需要些配置类,将restTemplate注入
ApplicationContextConfig 类
package com.atguigu.springcloud.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
/**
* @Author: 肖玉龙
* @Date: 2020/8/16 17:38
* @Email: 493820798@qq.com
* @phone: 17673115513
* @Version 1.0
*/
@Configuration
public class ApplicationContextConfig
{
@Bean
public RestTemplate getRestTemplate()
{
return new RestTemplate();
}
}
- 建controller
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: 肖玉龙
* @Date: 2020/8/16 17:38
* @Email: 493820798@qq.com
* @phone: 17673115513
* @Version 1.0
*/
@RestController
@Slf4j
public class OrderController {
/*做测试先写死支付服务地址*/
public static final String PAYMENT_URL = "http://localhost:8001";
@Resource
private RestTemplate restTemplate;
/*测试调用支付新增*/
@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);
}
}
- 最后我们订单模块成型结构
六、测试
然后我们运行 订单模块、支付模块
启动时idea会提示是否显示 run dashboard。我们记得显示方便对多个模块的启动
启动完后我们进行调用测试
经过测试,我们服务间调用时没有问题了