springcloud-消费者订单模块
1.创建订单模块
2.引入依赖到pom.xml
<dependencies> <!-- 包含了sleuth zipkin 数据链路追踪--> <!-- <dependency>--> <!-- <groupId>org.springframework.cloud</groupId>--> <!-- <artifactId>spring-cloud-starter-zipkin</artifactId>--> <!-- </dependency>--> <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> <!--eureka client--> <!-- <dependency>--> <!-- <groupId>org.springframework.cloud</groupId>--> <!-- <artifactId>spring-cloud-starter-netflix-eureka-client</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>
3.改application.yml
server:
port: 80
spring:
application:
name: cloud-consumer-orders
4.写主程序类
5.写业务
1)设计表和创建表(本次不用)
2)创建实体类(负责支付模块的即可,但是后面我们还得把这里公用的实体类抽取到一个模块中)
3)dao(本次不用)
4)service(本次不用)
这里解释下这里为社么不写dao和service。首先我们的微服务是分为业务服务和非业务服务,这里的订单服务是一个消费者,业务和对数据库的操作不需要他来做,他去调用即可。并且这里演示是作为客户端角色的80端口的订单服务去调服务端的8001端口的支付服务,这只是为了演示服务之间的调用,真正开放80端口的应该是前端的项目,用户访问前端,然后前端来调用我们后端。
5)controller
@RestController @CrossOrigin @Slf4j public class OrdersController { private static final String PAYMENT_URL = "http://localhost:8001"; @Autowired private RestTemplate restTemplate; @GetMapping("/consumer/payment/create") public CommonResult create(Payment payment){ return restTemplate.postForObject(PAYMENT_URL+"/payment/create", payment, CommonResult.class); } @GetMapping("/consumer/payment/get/{id}") public CommonResult selectPayment(@PathVariable("id") Long id){ return restTemplate.getForObject(PAYMENT_URL+"/payment/get/"+id,CommonResult.class); } }
在以前我们服务之间的调用使用的有httpclient或webservice等,而这里的RestTemplate的底层实际就是httpclient,使用该模板对象就能模仿发送请求,不过得记住一点的是:他post请求发送的参数是以json格式发给其他服务的,因此在其他服务模块得使用@RequestBody,不然接收会出错。
对了,这个RestTemplate得加入到IOC中,记得写给配置类,如下:
@Configuration public class ApplicationContextConfig { @Bean public RestTemplate getRestTemplate(){ return new RestTemplate(); } }
6.测试