调度spring流监听器以避免停机

时间:2017-09-20 18:14:06

标签: spring-cloud-stream

我有一个流监听器,它监听一个兔子mq,并根据输入的msg进行插入/更新操作,并将其持久保存到底层的Db2数据库。该数据库每周停机6小时。如何安排监听器在此时间范围内不运行,这样我就不会丢失输入消息。请记住,这个消息是在异步上下文中从兔队列的上游发送的,所以我不能要求上游在停机后重新发布/重试。

@StreamListener(target = Sink.INPUT)
public void testListener(byte[] msg)
{
    System.out.println(new String(msg));
    try{
        int count = zoneInsert(mapper.readValue(msg, OrderDTO.class));
        System.out.println("inserted "+count+" row");
    }catch(Exception e){
        e.printStackTrace();
    }
}

1 个答案:

答案 0 :(得分:2)

现在,并不多。我们在2.0中添加了对生命周期控制的支持。对此的两个黑客将是: 1.停止你的听力申请(如果可能的话) 2.将错误消息转发给DLQ并安排DLQ应用程序在数据库恢复生命后立即启动