我的问题与_1088213非常相似,但那里的解决方案对我不起作用 - 我正在尝试使用过滤器EIP来丢弃选定的交换 . 我的路线看起来像(为清晰起见而编辑):
from("{{fromSource}}")
.convertBodyTo(RequestInterface.class)
.enrich(INVOKE_BACKEND_URI, combiner)
.to("{{toDestination}}");
from(INVOKE_BACKEND_URI)
.to(backendUri)
.filter().method(DiscardResponse.class).log(LoggingLevel.INFO, "Discarding undesired response").stop().end()
.convertBodyTo(BodyInterface.class);
当过滤器没有选择消息时,一切都很好 - 不显示log(),消息转到convertBodyTo()然后返回主路径 .
但是,当过滤器选择消息时,会显示log()文本,但交换仍然继续到convertBodyTo(),在那里它会抛出异常,因为它是一条不应该存在的消息 . stop()似乎没有被执行或没有任何影响 .
有谁能建议解决这个问题?
2 回答
可以在处理器内执行此操作以停止交换:
由于我不习惯使用Java DSL编写我的路由,我不知道该选项是否可以直接在路由中的交换机上使用,但它可能是 .
我猜一种方法可能是:
看看这里的文档底部:http://camel.apache.org/message-filter.html