我有一个Web应用程序,一个从客户接受订单的订单服务,它首先写入MySQL订单表,然后创建一个事件并将其放在消息队列中,稍后该事件由处理器拾取,基本上做很多事情,比如发送电子邮件确认,安排付款,并为订单准备类似的东西,然后它会更新此订单表中的状态。
所以我遇到的问题是当客户想要在他/她下订单后取消订单时。如果可以取消订单,订单服务将首先接收该请求并检查该特定订单的状态(如果订单已经在去往接收方的路上,那么显然您无法取消) ,但既然它是从Slave而不是Master读取的,那么这个可能发生的小窗口可能会以“正在准备”的形式读取,但实际状态已经变为“Out of delivery”。我想知道除了总是从师父那里读到以外什么是另类的?
[Order service] ---> [DB] <-----
| |
| |
v |
[MQ] | update status
^ |
| |
|____[Order processor]____|