Spring Cloud RabbitMq:异常后重试发送

问题描述

我正在制作一个 队列1 接收数据,存储并发送到 队列2 的应用。它还从 队列2 接收数据,发出请求(http),保存并发送到 队列3 。如果在处理队列中的数据时出错,我想使它们永远保持一致(再次从队列中获取)。当我从 队列2 获取数据时,出现错误,但是随后我在 队列1 ,而不是我期望的 队列2

这是我的处理器

public interface MyProcessor {
    String INPUT = "input-1";
    String OUTPUT = "input-2";

    @Input(INPUT)
    SubscribableChannel input();

    @Output(Source.OUTPUT)
    MessageChannel output();
}
public interface MyProcessor2 {
    String INPUT = "input-2";
    String OUTPUT = "input-3";

    @Input(INPUT)
    SubscribableChannel input();

    @Output(Source.OUTPUT)
    MessageChannel output();
}

我的消费者:

@Slf4j
@Component
@EnableBinding(MyProcessor.class)
@requiredArgsConstructor
public class MyConsumer {

    private final SomeService someService;

    @Transformer(inputChannel = MyProcessor.INPUT,outputChannel = MyProcessor.INPUT)
    public SomeEntity handle(String text) {
        SomeEntity entity = new SomeEntity(text);
        entity = someService.save(entity);
        return entity ;
    }
}

@Slf4j
@Component
@EnableBinding(MyProcessor2.class)
@requiredArgsConstructor
public class MyConsumer2 {

    private final SendService sendService;
    private final SomeService someService;

    @Transformer(inputChannel = MyProcessor2.INPUT,outputChannel = MyProcessor2.OUTPUT)
    @Transactional
    public SomeEntity handle(SomeEntity entity) {
        entity = sendService.send(entity);
        entity =  someService.save(entity);
        return entity;
    }
}

我的application.yml

spring:
  cloud:
    stream:
      bindings:
        input-1:
          destination: input-event
        input-2:
          destination: send-event
        input-3:
          destination: end-event
      default:
        contentType: application/json

因此,当我在MyConsumer2中遇到异常时,我又在MyConsumer中有消息了,而不是在我的MyConsumer2

该如何解决

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...