gpt4 book ai didi

java - 如何在Camel中捕获seda队列满异常?

转载 作者:行者123 更新时间:2023-12-01 13:29:52 25 4
gpt4 key购买 nike

我正在使用 Camel 读取 JMS 队列并将其放入 SEDA 队列,然后通过单独的路由读取并进行处理。有时,如果我的应用程序出现问题,我的 SEDA 队列就会填满,然后我会得到:

java.lang.IllegalStateException: Queue full

这是有道理的。我想捕获这个异常,这样我就可以停止订阅 JMS 的路由(以阻止更多消息传入),但我似乎无法捕获它。

这是我的路线(简化):

from("{{jms.loader.in}}") 
.setExchangePattern(ExchangePattern.InOnly)
.routeId(this.getClass().getSimpleName())
.to("seda://JmsFetchRoute_incoming);

我试图将它包围在 doTry - doCatch 中,但没有捕获异常:

from("{{jms.loader.in}}") 
.setExchangePattern(ExchangePattern.InOnly)
.routeId(this.getClass().getSimpleName())
.doTry()
.to("seda://JmsFetchRoute_incoming)
.doCatch(Exception.class)
.log(LoggingLevel.ERROR, "Your queue is full!")
.end();

似乎无论我在“doCatch” block 中尝试做什么,它都永远不会达到这一点。那么如何将“调用”包装到 SEDA 队列,以便捕获队列已满异常?

编辑1

根据 hveiga 的回答,我还尝试使用“onException”创建一个 ErrorHandlingRoute 并将其添加到我的上下文中,但这也没有找到它:

@Override
public void configure() throws Exception {
onException(IllegalStateException.class)
.handled(true)
.log(LoggingLevel.ERROR, "Exception route stopping topic route, SEDA queue full")
.to("controlbus:route?routeId=JmsFetchRoute&action=stop")
.end();
}

我也将它添加到我的获取 route ,但仍然没有获取它:

from("{{jms.loader.in}}") 
.setExchangePattern(ExchangePattern.InOnly)
.routeId(this.getClass().getSimpleName())
.onException(IllegalStateException.class)
.handled(true)
.log(LoggingLevel.ERROR, "Topic consumer stopping route, SEDA queue full : " + this.getClass().getSimpleName())
.to("controlbus:route?routeId="+this.getClass().getSimpleName()+"&action=stop")
.end()
.to("seda://JmsFetchRoute_incoming);

编辑2

根据this post onException 不能在单独的 RouteBuilder 中定义...

编辑3

仍然没有运气从同一个路由生成器内部捕获异常,所以我给了我的“onException”路由一个名称,但在 JMX 中检查时该名称不在 Camel 的“路由”部分中?我需要打开一个配置来启用“onException”路由吗?

最佳答案

我认为您正在寻找onException()。 Camel 的这一功能将捕获您指定类型的任何异常,并让您以您喜欢的方式处理它。看来您想捕获该异常并使用控制总线组件停止路由。

它会是这样的:

onException(IllegalStateException.class).
handled(true).
to("controlbus:route?routeId=yourRouteId&action=stop");

欲了解更多信息,请查看:

关于java - 如何在Camel中捕获seda队列满异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21636934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com