分布式系统开发-订单服务分离SpringCloud(IV)

系统架构设计


浏览:652 次

订单服务的分离类似于商品和服务的分离,但为什么我们要进行单独的分析?因为订单服务和商品服务之前可以访问同一服务器中的服务器的数据,但分离后,商品服务中的商品信息数据不再可以由订单服务直接获取。因此,当用户请求订单信息时,订单服务必须首先请求商品服务中的商品信息,然后将订单信息与商品信息拼接并返回给用户。

好吧,有了这个想法,让我们根据这个想法来改革我们的项目。

首先,类似于商品和服务的分离,我们将mall/src/main/java.com/felix中的三个包复制并粘贴到订单模块下的felix包中,然后删除三个包装中与订单无关的所有内容(注意,此处不应删除货物模型,因为从货物和服务请求的货物信息最终将使用货物模型进行包装)。最后,只有Goods、Order、OrderDetails、OrderService GoodsService和OrderController,如图所示

接下来,我们模拟这种情况。在订单服务中,没有产品信息。因此,我们的GoodsService不能也不能包含产品数据。因此,我们将GoodsService转换为以下代码

包com.felix.service;

进口com.felix.model.Goods;

导入org.springframework.stereotype.Service;

/**

*由weistekweistek于2019/1/3创建。

*/

@服务

公共类GoodsService{

公共物品findGoodsById(长id){

返回null;

}

}

此处的返回值暂时写为空值。稍后,我们将修改它以从商品服务服务器获取产品信息并将其返回。

由于GoodsService中没有商品信息,因此无法再次使用响应OrderService初始构造中的错误数据。我们可以直接在虚假数据中创建一个无意义的商品数据(我们可以设置商品ID,因为商品ID在正常业务中可以保存在订单信息中,但没有商品的详细信息)。

包com.felix.service;

进口com.felix.model.Goods;

导入com.felix.model.Order;

导入com.felix.model.OrderDetails;

导入org.springframework.beans.factory.annotation.Autowired;

导入org.springframework.stereotype.Service;

导入java.util.*;

/**

*由weistekweistek于2019/1/3创建。

*/

@服务

公共类OrderService{

@自动连线

私人商品服务商品服务;

private static final Map<Long,Order>Order_Map=new HashMap<Leng,Order>();

静态的,静态的{

列表orderDetailsList=new ArrayList();

对于(长i=1L;i<=10L;i++){

商品=新商品();

goods.setGoodsid(i);

orderDetailsList。添加(新订单详情(i,i,货物,5));

order_map。put(i,新订单(i,i,new Date(),新日期(),new ArrayList<OrderDetails>(orderDetailsList)));

System.out.println(order_map);

}

}

公共订单findOrderById(长id){

订单订单=Order_map.get(id);

for(OrderDetails OrderDetails:order.getOrderDetailsList()){

货物=货物Service.findGoodsById(orderDetails.getGoods().getGoodsid());

orderDetails.setGoods(货物);

}

退货订单;

}

}

在上面的代码中,我们直接制作了假订单信息,并添加了相应的商品ID,即我们模拟了正常的订单信息。现在,GoodsDetails中的商品只有ID,没有其他信息。如何使用ID获取商品服务服务器上的商品信息?你还记得我们刚刚修改的GoodsService吗?它可以帮助我们获取产品信息。至于如何获得它,这是它的事情。我们只需要在OrderService中使用GoodsService来编写它。因此,在查询订单时,我们首先检查订单中有多少产品,然后使用产品ID查找产品(记住注入GoodsService),也就是上面的

for(OrderDetails OrderDetails:order.getOrderDetailsList()){

货物=货物Service.findGoodsById(orderDetails.getGoods().getGoodsid());

orderDetails.setGoods(货物);

}

现在我们回到了订单服务需要从商品服务获取产品信息的阶段。我们如何做到这一点?我们将对订单模块中的GoodsService进行以下修改:

包com.felix.service;

进口com.felix.model.Goods;

导入org.springframework.beans.factory.annotation.Autowired;

导入org.springframework.stereotype.Service;

导入org.springframework.web.client.RestTemplate;

/**

*由weistekw创建