如果控制器无法回复,则将响应添加到队列

时间:2020-07-01 19:27:41

标签: java spring-boot

我有两个基于Spring Boot实现的微服务,它们使用rest调用进行交互。现在,我想添加故障恢复功能,让我们举个例子

  1. 服务1通过HTTP呼叫服务2
  2. 服务1崩溃死于OOM之类的错误。
  3. 服务2完成了交易,现在可以回复
  4. 服务2尝试回复但由于连接不存在而无法回复。

现在我可以实现Spring异常处理程序,但是在这种情况下会引发所有异常。我的原因。令我感到困惑的是,我看到了两个Connection Reset(我认为是逻辑上的),但它有时也会引发HttpMessageNotWritable异常。

如果我可以处理这些异常,则可以将响应放入队列,服务1将从队列中提取响应。

任何帮助。将不胜感激。谢谢

1 个答案:

答案 0 :(得分:0)

您应该考虑service1如何知道在service2上有等待它的响应,它是对哪个请求的响应。另外,如果service1在崩溃时处于事务中,则该事务未提交。是否应该为service1部分启动新事务并要求service2排队等待响应?

最好在service2上使用REST接口,并确保数据操纵操作是幂等的。在这种情况下,当service1恢复时,它可以重复对service2的调用,并且不需要队列