带有RabbitMQ的春季云流

时间:2018-10-10 19:08:04

标签: spring rabbitmq spring-cloud-stream

当前,在我的项目中,我正在使用Rabbitmq的Spring Cloud Stream。一切都很好,但是问题是当我在StreamListener中为消息类型设置条件时。如果RabbitMQ与类型不匹配(找不到ID为ZZZZZZ的消息的@StreamListener匹配项),则此消息将从队列中消失。如果邮件类型错误,我不想删除此邮件。这个问题有解决方案吗?

1 个答案:

答案 0 :(得分:1)

有两种方法可以做到:

  • 如果消息的类型错误,则引发异常。在这种情况下,由于未成功处理该消息并且未收到ACK,因此该消息不会从队列中删除。
  • 一旦检测到类型错误,请自行在队列中插入消息。

这两种方法都会遭受无限循环的困扰。消息已处理,类型错误,重新插入,然后重复此过程。为了避免这种情况,您可以添加一些重新插入策略,例如:指数延迟或有限次数的重新插入等。

但是有些疑问出现了:为什么您的服务消耗了本不应该的消息?也许您需要特定处理器的此消息?在这种情况下,您可以路由到合适的处理器。