Spring boot + camel + rabbitmq - 如何优雅地退出并重新排队到另一个队列

时间:2018-02-02 15:31:33

标签: spring-boot rabbitmq apache-camel

当我用骆驼做一些rabbitmq处理时,我遇到了一个非常奇怪的问题(至少对我而言!)。这是我的路线DSL

的近似值
onException(IOException.class)
    .bean("killApplication with Spring.exit")
    .handled(true);


onException(JsonPathException.class)
    .removeHeaders("*")
    .to("rabbitmq://localhost:5672/<bad messages queue>")
    .handled(true);


from("rabbitmq://localhost:5672/<central exchange>")
    .filter().method("some bean filtration")
    .removeHeaders("*")
    .to("rabbitmq://localhost:5672/<local queue>");
    .end();

一切顺利,直到我得到IOException并执行SpringApplication.exit但控件不会回到我的终端。它只是闪烁,我需要按Ctrl ^ C退出应用程序。

经过一番调查,罪魁祸首是JSONPathException中的.to。如果我评论该行

//.to("rabbitmq://localhost:5672/<bad messages queue>") 

一切正常,应用程序退出并返回终端提示符。

我很难过。我不想使用兔子的dlq但我想在格式错误的消息上推送到我自己的队列。

有人可以告诉我可能导致这个问题的原因吗?我只能通过rabbit dlq找到这个问题的答案,但就像我说我希望在异常时路由到我自己的队列(另一个例外我想要杀死该应用程序)。不用添加system.exit会杀死应用程序,但我不希望这样做,因为我希望正常关闭。

请帮忙。

Ananth

编辑: 请注意,有趣的部分是JSONPathException甚至不是激活的路由。这是一个触发kill的IOException,所以更令人困惑的是,甚至触发路径中的路径都不会导致问题:(

0 个答案:

没有答案