当我用骆驼做一些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,所以更令人困惑的是,甚至触发路径中的路径都不会导致问题:(