如果template.convertSendAndReceive消费者消息处理程序抛出异常,则抛出异常?

时间:2014-04-21 07:10:09

标签: java spring-batch spring-amqp

我正在使用spring batch和spring amqp。我正在使用

在我的春季批处理ItemWriter中生成消息
public class ImportItemWriter<T> implements ItemWriter<T> {

    private AmqpTemplate template;

    public AmqpTemplate getTemplate() {
        return template;
    }

    public void setTemplate(AmqpTemplate template) {
        this.template = template;
    }

    public void write(List<? extends T> items) throws Exception {
        for (T item : items) {
            template.convertSendAndReceive(item.toString());                
        }
    }

}

在消费者方面,我使用POJO来使用MessageListenerAdapter处理消息。

public class ImportMessageListener{

    @Override
    public String handle(String exchange) throws Exception {
        throw new Exception("Command Failed.");
    }

}

我想要template.convertSendAndReceive(item.toString());抛出消息处理程序抛出的同一异常,以便spring批处理可以停止批处理,将其标记为失败并记录异常?

我看过这个,但无法获得如何实现上述用例?

http://docs.spring.io/spring-amqp/docs/1.3.1.RELEASE/reference/html/amqp.html

我该怎么做?

1 个答案:

答案 0 :(得分:1)

没有一般机制可以做到这一点,尽管我们正在考虑将来发布Spring Integration

只要您的异常是可序列化的,您就可以将其作为结果发送并在发送系统上测试有效负载类型......

public Object handle(String foo) {
    return new MySerializableException("Command failed");
}

而且,在接收方......

if (result instanceof Exception) {
    throw (Exception) result;
}