我有一个用Java编写的微服务应用程序,它是项目中众多应用程序中的一个。
所以情况是这样的。
- 有一个类,比如说
X
,它执行与该X
及其属性相关的所有处理。基本上是CCD_ 3 - 调用来自
RestResourceHandler
上的rest接口 - 另一个电话来自卡夫卡消费者,比如
KafkaResourceHandler
- DB相关的东西是使用DAO类完成的,比如
DAOHandler
以下是发生的情况,RestResourceHandler
和KafkaResourceHandler
都调用X
对象,并使用X中可用的方法进行转换,然后都使用DAOHandler
将该X
保存到DB中,问题是在进行转换时,两个资源处理程序都会对X
的属性进行一些检查,如果不符合预期,则会发生竞争条件。
例如,如果rest资源在存储到DB之前期望X.a=1
,但直到请求到达时,X.a =2
已经完成并由kafka资源保存在DB中。
所以基本上我需要一个精简机制,以便按顺序进行处理
可以做到这一点的一种方法是将所有传入请求放在按resourceId划分的kafka主题上。这样,当您处理这些请求时。。他们总是按顺序排列,你可以避免比赛条件。