代码之家  ›  专栏  ›  技术社区  ›  italktothewind

SpringCloud流:如何重新发布到死信队列并抛出异常

  •  0
  • italktothewind  · 技术社区  · 5 年前

    我正在将使用SpringAMQP的项目迁移到使用带有rabbitmq的SpringCloud流的项目。

    在我的旧项目中,当使用@rabbitlistener处理消息时发生异常时,引发了该异常。如果有一个死信队列被绑定,异常仍然被抛出(只有一次,如果有重试,我猜是最后一次)。这对于日志记录非常有用。

    在SpringCloud中,如果您定义属性,@streamlistener有一个死信队列机制:

    spring.cloud.stream.bindings.input1.destination=dest1
    spring.cloud.stream.rabbit.bindings.input1.consumer.auto-bind-dlq=true
    spring.cloud.stream.rabbit.bindings.input1.consumer.republishToDlq=true
    

    但是如果你有这样的方法(只是一个例子):

    @StreamListener("input1")
    public void process(String message){
        System.out.println("Trying...");
        throw new RuntimeException();
    }
    

    日志是:

    Trying...
    Trying...
    Trying...
    (end of log, no exception thrown)
    

    是否有任何方法可以引发异常(仅在上次重试时)?

    谢谢!

    1 回复  |  直到 5 年前
        1
  •  2
  •   Gary Russell    5 年前

    请参阅有关消费者属性的文档。

    集合 ...consumer.max-attempts=1 禁用重试。