如何处理Redux +微服务相互通信

时间:2015-12-07 22:09:15

标签: redux redux-thunk

我们正在实施一项竞价云服务,该服务将从外部API服务接收订单。每个收到的订单都是 1:1到拍卖

我们每天可以拥有超过 2000个订单(拍卖)。 我们决定使用微服务+ Redux 来区分订单和拍卖之间的关注。

Bellow是每项服务的解释。

外部API

Enternal API只是一个将订单推送到我们的订购服务的网站,并从我们的订单服务接收更新,我们无法控制它。

订购服务

Orders拥有大量信息(属性),客户端(移动应用程序)使用这些信息来获取决定加入拍卖的信息。例如,这就是订单的样子:

{
  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 - 外部API 通过LOAD_ORDERS将当天的订单推送到订购服务,同时将CREATE_AUCTIONS操作分派到操作服务以创建每个订单的拍卖。

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 的利弊是什么?

很抱歉这篇长篇文章,我只是需要一些方向,因为我找不到任何关于这个主题的文档,我不确定我是否正在接近这一点。

任何建议都将不胜感激!!!

1 个答案:

答案 0 :(得分:0)

我认为这个问题与指导方针相去甚远。

不过,我要说的是编写您自己的redux中间件来集成您的微服务。 API非常简单:

$ LINE='Line 21800: Value: $${scripts-dir1}part_archive_ret_hist_stg.ksh 
$ echo $LINE|awk -F "[{}]" '{print $2"\n"$4}'
scripts-dir1
databse-name

在最外部的功能(store => next => action => { let result = next(action) return result } )中,您可以添加微服务列表器并通过商店引用来调度动作。 在最内部的功能(store =>中,您可以通过将请求发送到微服务来对redux应用程序中的操作做出反应。