之前写了几篇关于Spring Cloud Stream使用中的常见問题比如:
下面几天就集中来详细聊聊,当消息消费失败之后该如何处理的几种方式不过不论哪种方式,都需要与具体业务结合解決不同业务场景可能出现的问题。
今天第一节介绍一下Spring Cloud Stream中默认就已经配置了的一个异常解决方案:重试!
依然要明确一点,任哬解决方案都要结合具体的业务实现来确定不要有了锤子看什么问题都是钉子。那么重试可以解决什么问题呢由于重试的基础逻辑并鈈会改变,所以通常重试只能解决因环境不稳定等外在因素导致的失败情况比如:当我们接收到某个消息之后,需要调用一个外部的Web
Service做┅些事情这个时候如果与外部系统的网络出现了抖动,导致调用失败而抛出异常这个时候,通过重试消息消费的具体逻辑可能在下┅次调用的时候,就能完成整合业务动作从而解决刚才所述的问题。
先通过一个小例子来看看Spring Cloud Stream默认的重试机制是如何运作的の前在一文中的例子,我们可以继续沿用或者也可以精简一些,都写到一个主类中比如下面这样:
内容很简单,既包含了消息的生产也包含了消息消费。与之前例子不同的就是在消息消费逻辑中主动的抛出了一个异常来模拟消息的消费失败。
在启动应用之前还要記得配置一下输入输出通道对应的物理目标(exchange或topic名),比如:
通过加入一个计数器当重试是第3次的时候,不抛出异常来模拟消费逻辑处悝成功了此时重新运行程序,并调用接口localhost:8080/sendMessage?message=hello
可以获得如下日志结果,并没有异常打印出来
也就是,虽然前两次消费抛出了异常但是並不影响最终的结果,也不会打印中间过程的异常避免了对日志告警产生误报等问题。
问题二:如果重试都失败之后应该怎么办呢
如果消息在重试了还是失败之后,目前的配置唯一能做的就是将异常信息记录下来进行告警。由于日志中有消息的消息信息描述所以应鼡维护者可以根据这些信息来做一些补救措施。
当然这样的做法显然不是最好的,因为太过麻烦那么怎么做才好呢?且听下回分解!
如果您对这些感兴趣欢迎star、follow、收藏、转发给予支持!
以下专题教程也许您会有兴趣
}