搭建Eureka Client订单微服务

在9.3节中我们搭建好了一个商品微服务,本节我们来搭建一个订单(order)微服务,实现简单的查询订单的功能。

 

通常订单只保存商品的ID,而我们在查询订单的时候需要看到商品的详细信息,所以就需要通过调用商品微服务来协助订单微服务实现此项功能。

此时,商品微服务就是服务提供者,而订单微服务则是服务消费者。

 

我们开始创建订单微服务,如图所示,使用IDEA创建一个名为order的Spring Boot项目。

 

 

同样地,在“dependcies”界面中勾选“Web”中的“Spring Web”和“Spring Cloud Discovery”中的“Eureka Discovery Client”。

 

创建好后,同样地,我们先将配置文件扩展名改成“.yml”。然后在application.yml中写入配置,如程序清单9-9所示。

server.port配置服务的端口号为7002,spring.application.name配置服务的名称为order。service-url.defaultZone表示注册中心地址。

 

 

 server.port配置服务的端口号为7002,

spring.application.name配置服务的名称为order。

service-url.defaultZone表示注册中心地址。

 

 

然后,在项目启动类OrderApplication上添加@EnableEurekaClient注解开启Eureka Client。

 

接着,和创建商品微服务一样,我们构建好如图9-11所示的订单微服务结构。

因为订单微服务也需要用到商品类,所以把商品微服务的商品类Goods复制到entity中。

然后,我们开始编写具体代码。先定义Order实体类,如程序清单9-10所示。

 

 

这里我们定义了3个属性,分别是id(订单ID)、goodsId(商品ID)和time(下单时间)。

 

然后,定义OrderService接口,如程序清单9-11所示。

 

 

我们写两个接口方法分别用于查询所有订单和根据ID查询订单。

 

接着,定义OrderService接口的实现类OrderServiceImpl,如程序清单9-12所示。

 

 为了实现查询功能,我们需要假设一些数据。首先,定义一个常量orderMap,用于存储订单集合。

然后,在静态代码块中构造3个订单对象,并将其添加进orderMap。接着,使用RestTemplate调用商品微服务。

 

RestTemplate是由Spring提供的一个HTTP请求工具。

除了RestTemplate,也可以使用Java自带的HttpURLConnection或者经典的网络访问框架HttpClient。

 

在Spring Boot项目中,使用RestTemplate更方便一些。

然后,我们实现OrderService接口中的findAll方法,查询所有订单则返回orderMap保存的所有订单,不过我们还要循环遍历调用findGoodsById方法查询出每个订单的商品信息,然后将其组合成一个集合返回。

最后,实现OrderService接口中的findById方法,首先根据订单ID查询出订单信息,再根据订单信息中的商品ID通过调用findGoodsById方法查询出对应的商品信息,最后将它们组合成一条完整的订单信息返回。

 

 

 我们写完之后发现restTemplate带红色波浪线,原因是我们没有指定要注入的对象。所以需要写配置类。

不过为了简便,可以直接在启动类上写相应代码,如程序清单9-13所示。

 

 

 

其中,@LoadBalanced表示开启负载均衡,这时的RestTemplate便只能调用注册中心中注册的服务,并且通过服务名来调用。

 

最后,定义OrderController类,如程序清单9-14所示。

 

 这里定义了两个接口“all”和“one”,分别通过调用OrderService的实现方法来实现查询订单的功能。然后,我们启动订单微服务,在浏览器中

 

测试查询所有订单和根据ID查询订单,结果如图9-12和图9-13所示。

 

 

最后,我们访问注册中心,验证一下,注册中心是否含有商品微服务和订单微服务的注册信息,如图9-14所示,

 

posted @ 2022-12-14 09:55  cnetsa  阅读(130)  评论(0编辑  收藏  举报