微服务调用-下|学习笔记

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 快速学习微服务调用-下

开发者学堂课程【全面讲解 Spring Cloud Alibaba 技术栈微服务调用-下】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/683/detail/11861


微服务调用-下


内容介绍

一、学习计划

二、代码开发

三、代码测试

学会编写用户下单,客户发起请求,告诉网站,要买几件什么商品的程序


一、学习计划

image.png

已经完成商品微服务( 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地址,然后如下图所示运行订单微服务

image.png

把端口号换一下,换成809,然后对2号进行下单,正确启动不报错

运行结果如下

image.png

后台的变化是显示已经查询到订单信息,然后调用订单微服务

然后我们就实现了用户下单,客户发起请求,告诉网站,要买几件什么商品这样一个服务,我们准备了两个微服务,一个是订单微服务,一个是商品微服务,订单微服务它的作用是保存订单,商品微服务它的作用是根据 id 查询商品信息,然后呢订单微服务又要调用到商品微服务来做这件事情,我们一般会给这两个微服务取个名字,商品微服务叫做服务提供者,订单微服务被称为服务的消费者

相关文章
|
5月前
|
SpringCloudAlibaba Java 网络架构
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(二)Rest微服务工程搭建
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(二)Rest微服务工程搭建
128 0
|
5月前
|
SpringCloudAlibaba Java 网络架构
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
240 0
|
5月前
|
SpringCloudAlibaba 负载均衡 Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(目录大纲)
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(目录大纲)
136 1
|
5月前
|
SpringCloudAlibaba Java 测试技术
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(六)Hystrix(豪猪哥)的使用
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(六)Hystrix(豪猪哥)的使用
136 1
|
5月前
|
SpringCloudAlibaba 负载均衡 Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(三)Eureka服务注册中心
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(三)Eureka服务注册中心
93 1
|
5月前
|
SpringCloudAlibaba Java 持续交付
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(一)基础知识+各个组件介绍+聚合父工程创建
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(一)基础知识+各个组件介绍+聚合父工程创建
713 1
|
5月前
|
Java Nacos Sentinel
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(九)Nacos+Sentinel+Seata
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(九)Nacos+Sentinel+Seata
678 0
|
5月前
|
消息中间件 SpringCloudAlibaba Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
949 0
|
5月前
|
SpringCloudAlibaba 负载均衡 Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(五)OpenFeign的使用
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(五)OpenFeign的使用
89 0
|
5月前
|
负载均衡 算法 Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(四)Ribbon的使用
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(四)Ribbon的使用
93 0
下一篇
无影云桌面