开发者学堂课程【全面讲解 Spring Cloud Alibaba 技术栈:微服务调用-下】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/683/detail/11861
微服务调用-下
内容介绍
一、学习计划
二、代码开发
三、代码测试
学会编写用户下单,客户发起请求,告诉网站,要买几件什么商品的程序
一、学习计划
已经完成商品微服务( product )的商品查询功能的学习,现在开始学习订单微服务( order )的商品下单 createOrderorder ( order )功能
二、代码开发
(1)打开订单微服务( shop-order )依次打开 src 文件夹,main 文件夹, java 文件夹,com.itheima 文件夹,controller 文件夹下的 ordercontroller 内编写程序代码
代码如下:
package com.itheima.controller;
import com.itheima.domain.order;
impoct org.springframework.web.bind.annotation.RequestMapping;
import org.springtranowork.web.bind.annotation.RestController;
@RestController
@slf4j
publlc class ordercontroller{
//下单
@ RequestMapping (“/ order / prod / {pid }”)
//这是设置一个请求
public order order (@pathVariable(“pid”) Integoz pid) {
log.info
(“接收到{ }号的商品请求,接下来调用商品微服务查询此商品信息”,pid);
//调用商品微服务,查询商品信息
Product product =
(2)然后打开 service 下的 OrderApplication (如下图所示)继续编写代码,实现用 RestTemplate 来查询
package com.itheima;
import …
@SpringBootApplication
publlc class OrderApplication {
public static void main (String [ ] args) {
SpringApplication.run(OrderApplication.class);
}
@Bear
Public RestTemplate restTemplate () {
return new RestTemplate();
}
}
(3)然后利用 ordercontroller 代码发请求
package com.itheima.controller;
import com.itheima.domain.order;
impoct org.springframework.web.bind.annotation.RequestMapping;
import org.springtranovork.web.bind.annotation.RestController;
@RestController
@slf4j
publlc class ordercontroller{
@Autowired
private RestTemplate = resTemplate;
//下单
@ RequestMapping (“/ order / prod / {pid }”)
public order order (pathVariable(“pid”) Integoz pid) {
log.info(“接收到{ }号的商品请求,接下来调用商品微服务查询此商品信息”,pid);
//调用商品微服务,查询商品信息Product product =restTemplate.getForobject(url:” localhost:8081/product/+pid,product.class”);
//url地址可以抄一下刚才访问的地址:localhost:8081/product/3,注意这个地址应该把最后一个3变成变量,所以加上一个pid就可以了,返回值是一个 product 类型的,这样的话就完成了调用
}
}
(4)在切换回 OrderController.java 就可以写一个日志出来了
package com.itheima.controller;
import com.itheima.domain.order;
mpoct org.springframework.web.bind.annotation.PathVariable;
impoct org.springframework.web.bind.annotation.RequestMapping;
import org.springtranowork.web.bind.annotation.RestController;
@RestController
@slf4j
publlc class ordercontroller{
//下单
@ RequestMapping (“/ order / prod / {pid }”)
//这是设置一个请求
public order order (@pathVariable(“pid”) Integoz pid) {
log.info(“接收到{ }号的商品请求,接下来调用商品微服务查询此商品信息”,pid);
//调用商品微服务,查询商品信息Product product =restTemplate.getForobject(url:” localhost:8081/product/+pid,product.class”);
log.info(“查询到 { } 号商品的信息,内容是:{ }”,pid, JSON.toJSONtring(product));
}
}
(5)现在商品信息查询已经完毕了,现在完成第二部下单,下单其实是一个创建订单的过程,要创建订单我们需要注入订单微服务
package com.itheima.controller;
import com.itheima.domain.order;
mpoct org.springframework.web.bind.annotation.PathVariable;
impoct org.springframework.web.bind.annotation.RequestMapping;
import org.springtranowork.web.bind.annotation.RestController;
@RestController
@slf4j
publlc class ordercontroller{
@Autowired
private RestTemplate = resTemplate;
@Autowired
private orderservice orderservice;
//下单
@ RequestMapping (“/ order / prod / {pid }”)
//这是设置一个请求
public order order (@pathVariable(“pid”) Integoz pid) {
log.info(“接收到{ }号的商品请求,接下来调用商品微服务查询此商品信息”,pid);
//调用商品微服务,查询商品信息Product product =restTemplate.getForobject(url:” localhost:8081/product/+pid,product.class”);
log.info(“查询到 { } 号商品的信息,内容是:{ }”,pid, JSON.toJSONtring(product));
//下单(创建订单)
Order order = new order();
Orderservice.createorder (order)
;
(6)接下来来组装,点击进入 Order,java 把如图所示的用户,商品,数量相关需要用参数拿出来
package com.itheima.controller;
import com.itheima.domain.order;
mpoct org.springframework.web.bind.annotation.PathVariable;
impoct org.springframework.web.bind.annotation.RequestMapping;
import org.springtranowork.web.bind.annotation.RestController;
@RestController
@slf4j
publlc class ordercontroller{
@Autowired
private RestTemplate = resTemplate;
@Autowired
private orderservice orderservice;
//下单
@ RequestMapping (“/ order / prod / {pid }”)
//这是设置一个请求
public order order (@pathVariable(“pid”) Integoz pid) {
log.info(“接收到{ }号的商品请求,接下来调用商品微服务查询此商品信息”,pid);
//调用商品微服务,查询商品信息Product product =restTemplate.getForobject(url:” localhost:8081/product/+pid,product.class”);
log.info(“查询到 { } 号商品的信息,内容是:{ }”,pid, JSON.toJSONtring(product));
//下单(创建订单)
Order order = new order();
order.SetUid(1);
// 这个是用户信息
order.SetUsername(“测试用户”);
//接下来是商品信息,已经从上边的 product 里边获取了
order.setPid(pid);
order.setPname(product.getPname () );
order.setPprrice (product.getPprrice () );
order.setNumber (1);
Orderservice.createorder (order);
(7)到这里 order 一类就已经组装完毕,然后传到 Orderservice 里进行保存即可,最后在后边打一个日志
package com.itheima.controller;
import com.itheima.domain.order;
mpoct org.springframework.web.bind.annotation.PathVariable;
impoct org.springframework.web.bind.annotation.RequestMapping;
import org.springtranowork.web.bind.annotation.RestController;
@RestController
@slf4j
publlc class ordercontroller{
@Autowired
private RestTemplate = resTemplate;
@Autowired
private orderservice orderservice;
//下单
@ RequestMapping (“/ order / prod / {pid }”)
//这是设置一个请求
public order order (@pathVariable(“pid”) Integoz pid) {
log.info(“接收到{ }号的商品请求,接下来调用商品微服务查询此商品信息”,pid);
//调用商品微服务,查询商品信息Product product =restTemplate.getForobject(url:” localhost:8081/product/+pid,product.class”);
log.info(“查询到 { } 号商品的信息,内容是:{ }”,pid, JSON.toJSONtring(product));
//下单(创建订单)
Order order = new order();
order.SetUid(1);
// 这个是用户信息
order.SetUsername(“测试用户”);
//接下来是商品信息,已经从上边的 product 里边获取了
order.setPid(pid);
order.setPname(product.getPname () );
order.setPprrice (product.getPprrice () );
order.setNumber (1);
Orderservice.createorder (order);
Log.inf(“创建订单成功,订单信息为 { } ”, JSON.toJSONString(order) );
Return order;
(8)然后点击 Orderservice,创建 Orderservice 方法
ackage com.itheima.service;
import com.itheima.domain,order;
public interface orderservice {
//创建订单
void createorder(order order);
}
(9)接下来点击 public interface orderservice 前方的绿色按钮,找到 service 时间类
package com.itheima.service.impl;
import com.itheima.dao.orderDao;
import com.itheima.domain.order;
import com.itheima.service.orderservice;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
//放进容器里边
public class orderserviceImpl implements orderservice {
@Autowired
//这里需要调用一个 order 的 Dao 层
private orderDao orderDao;
@override
public void createorder(order order) {
orderDao.save (order);
}
}
以上就是代码开发的全过程,接下来进行测试
三、代码测试
先复制一下/order/prod地址,然后如下图所示运行订单微服务
把端口号换一下,换成809,然后对2号进行下单,正确启动不报错
运行结果如下
后台的变化是显示已经查询到订单信息,然后调用订单微服务
然后我们就实现了用户下单,客户发起请求,告诉网站,要买几件什么商品这样一个服务,我们准备了两个微服务,一个是订单微服务,一个是商品微服务,订单微服务它的作用是保存订单,商品微服务它的作用是根据 id 查询商品信息,然后呢订单微服务又要调用到商品微服务来做这件事情,我们一般会给这两个微服务取个名字,商品微服务叫做服务提供者,订单微服务被称为服务的消费者