Spring Cloud Stream错误通道不起作用

时间:2018-09-19 18:19:49

标签: spring spring-cloud-stream

编辑:

用例:接收请求,对其进行处理,并在请求完成后通知某人。当进程出现错误以供日后重新处理时,将其放入另一个队列。

我需要一个API,该API可以接收有效负载并将其发送到队列(要处理的作业)。然后拾取消息并开始使用该有效负载来调用另一个Rest服务,并将该调用的响应放入新队列(已完成作业)中,然后另一个服务将选择该消息并通知另一个服务其完成。

因此,API POST将消息存储在一个队列中,对消息进行处理,然后将该消息的结果存储在另一个队列中。


我有一个带有两个绑定的应用程序,一个绑定用于空闲作业,一个绑定用于处理的作业。该应用程序按预期工作,但是当我引发异常时,spring尝试将消息重新处理3次后,它没有将任何消息发送到processing.default.errors,而是引发了异常:

  

由以下原因导致:org.springframework.messaging.MessageDeliveryException:无法将消息发送到通道“ processed.default.errors”;嵌套的异常是org.springframework.amqp.rabbit.listener.exception.ListenerExecutionFailedException:重试策略用尽

@Component
public interface JobBinding {

    String INPUT = "jobs-in";
    String OUTPUT = "jobs-out";

    @Input(INPUT)
    SubscribableChannel input();

    @Output(OUTPUT)
    MessageChannel output();
}

-

@Component
public interface ProcessedBinding {

    String INPUT = "processed-in";
    String OUTPUT = "processed-out";

    @Input(INPUT)
    SubscribableChannel input();

    @Output(OUTPUT)
    MessageChannel output();
}

我都启用了它们:

@EnableBinding({JobBinding.class, ProcessedBinding.class})
public class BindingsConfiguration {
}

然后我处理工作:

@Component
@Slf4j
public class JobProcessor {

    @StreamListener(JobBinding.INPUT)
    @SendTo(ProcessedBinding.OUTPUT)
    public Message<Job> handleJob(@Payload Job job) {
        log.info("Processing {}", job);
        job.addMetadata("status", "processed");
        return MessageBuilder.withPayload(job).build();
    }
}

然后我就动弹了:

@Component
@Slf4j
public class DoneProcessor {

    @StreamListener(ProcessedBinding.INPUT)
    public void handleJob(@Payload Job job) {
        log.info("Notifying {}", job);
        throw new RuntimeException("puff");
    }
}

我的application.properties如下:

spring.cloud.stream.bindings.jobs-out.destination=jobs
spring.cloud.stream.bindings.jobs-in.destination=jobs
spring.cloud.stream.bindings.jobs-in.group=default

spring.cloud.stream.bindings.processed-out.destination=processed
spring.cloud.stream.bindings.processed-in.destination=processed
spring.cloud.stream.bindings.processed-in.group=default

spring.cloud.stream.default.contentType=application/json

由于找不到解决方案,我尝试阅读Spring Stream Cloud的文档。队列应自动创建。

0 个答案:

没有答案