我们正在实施拍卖云服务,该服务将根据需要从外部API服务接收订单.每个收到的订单是拍卖的1:1.
我们每天可以有超过2000个订单(拍卖).我们决定使用Microservices + Redux来区分订单和拍卖之间的关注点.
贝娄是每项服务的解释.
外部API
Enternal API只是一个网站,它将订单推送到我们的订单服务,并从我们无法控制的订单服务接收更新.
订购服务
订单有一堆信息(属性),客户端(移动应用程序)使用这些信息来获取决定加入拍卖的信息.例如,这是订单的样子:
{ id: 123, description: 'Some description', salePrice: 0, minPrice: 1000, openPrice: 500, status: 'active', address: 'Some address', file: '.../some-file.pdf', client: 'Joe Doe', notes: 'Some notes', createdAt: '12345678', pending: false, postpone: false, ...moreproperties }
在订单服务中,服务器可以在拍卖开始前的任何时间通过下面的操作更新订单(地址,名称,openPrice,minPrice,状态等).
{ type: LOAD_ORDERS, orders } { type: PEND_ORDER, id } { type: POSTPONE_ORDER, id } { type: SET_ORDER_AUCTION, id, auction, salePrice } { type: UPDATE_ORDER, id, properties }
拍卖服务
此服务中的拍卖对象可能如下所示:
{ id: 'abcd', orderId: 123456, increment: 1, outBid: { agentId: 'b1', price: 545 }, bestBid:{agentId: 'b2', price: 550 }, openPrice: 500, currentPrice: 550, status: 'started' startedByAgent: 'a1' }
可以通过以下操作更新拍卖:
{ type: JOIN_AUCTION, id, agentId, type } { type: START_AUCTION, id, agentId } { type: PLACE_BID, id, agentId, price } { type: END_AUCTION, id, agentId }
API服务
它只是作为前端应用程序和微服务之间的网关.以行动的形式接收和发送客户(手机)到订单服务或拍卖服务的请求.
工作流程:
1 - 通过LOAD_ORDERS 向订购服务当天的外部API推送订单,还将CREATE_AUCTIONS操作分派给Action Service,以便为每个订单创建拍卖.
2 - 用户打开移动应用程序并获取当天的订单列表,其中包括订单服务的公开价格.
3 - 用户加入特定订单 - API服务创建将出价的出价代理.- API服务通过JOIN_AUCTION发送加入操作以加入拍卖服务上的拍卖
4 - 拍卖师代理开始拍卖并开始竞标.
5 - 加入的投标人代理商开始通过PLACE_BID对拍卖服务进行投标.
6 - 当拍卖结束时,拍卖师通过派遣END_AUCTION结束拍卖.
7 - 当拍卖结束时,销售价格和拍卖细节(通过对象)通过SET_ORDER_AUCTION 发送到订单服务.
8 - 订单服务处理SET_ORDER_AUCTION并使用最终的salePrice和拍卖对象更新订单状态,然后等待付款.
9 - 从客户收到付款信息后,订单服务将其提交给外部服务
我的问题是:
工作流程是否是使用微服务+ Redux并更新每个服务状态的合理方法?
使用redux微服务时,可以将微服务的操作分配给另一个吗?我的问题是因为在使用微服务+事件源+ CQRS时,不推荐服务互通,而是使用Sagas作为将事件转换为命令的中间服务.
我的另一个问题是在哪里放置业务逻辑(验证),例如,如果拍卖没有开始或者它已经结束,投标人就无法发出出价,如果他/她尚未加入拍卖,则投标人无法发出出价.这个逻辑是什么?在行动,中间件还是减速机?以及如何处理客户的错误?
一般来说,微服务+ Redux的最佳实践是什么?
使用微服务+ Redux与微服务+事件源+ CQRS的利弊是什么?
对不起,很长的帖子,我只是需要一些方向,因为我找不到任何关于这个主题的文档,我不确定我是否正在接近这个权利.
任何意见,将不胜感激!!!