如何避免微服务应用程序中的竞争条件



我有一个用Java编写的微服务应用程序,它是项目中众多应用程序中的一个。

所以情况是这样的。

  1. 有一个类,比如说X,它执行与该X及其属性相关的所有处理。基本上是CCD_ 3
  2. 调用来自RestResourceHandler上的rest接口
  3. 另一个电话来自卡夫卡消费者,比如KafkaResourceHandler
  4. DB相关的东西是使用DAO类完成的,比如DAOHandler

以下是发生的情况,RestResourceHandlerKafkaResourceHandler都调用X对象,并使用X中可用的方法进行转换,然后都使用DAOHandler将该X保存到DB中,问题是在进行转换时,两个资源处理程序都会对X的属性进行一些检查,如果不符合预期,则会发生竞争条件。

例如,如果rest资源在存储到DB之前期望X.a=1,但直到请求到达时,X.a =2已经完成并由kafka资源保存在DB中。

所以基本上我需要一个精简机制,以便按顺序进行处理

可以做到这一点的一种方法是将所有传入请求放在按resourceId划分的kafka主题上。这样,当您处理这些请求时。。他们总是按顺序排列,你可以避免比赛条件。

最新更新