// Note that this labelling could be bundled into a processor
choice()
.when(body().isInstanceOf(Student.class))
.setProperty("TYPE", "STUDENT")
.when(body().isInstanceOf(Employee.class))
.setProperty("TYPE", "EMPLOYEE")
.end()
// later after some body transformations
.choice()
.when(exchangeProperty("TYPE").isEqualTo("STUDENT"))
// process student
4条答案
按热度按时间3mpgtkmj1#
或者你可以这样做:
字符集
lstz6jyr2#
尝试exchange.getIn().getBody()instanceof Student
hlswsv353#
我会在header中设置a值来表示它是哪个服务,然后在camel路由上发送它。这种方法只是这样做的一种方式。Christian Schneider有另一个很好的解决方案,我可能会更多地使用它,因为我已经比以前更了解Camel了。然而,两者都将实现相同的事情,取决于你问谁,其中一个可能比另一个更清楚。
例如,您可以:
字符集
然后,您可以在Java DSL甚至spring DSL中过滤头。
在Java DSL中,你可以这样做(伪代码)
型
在Spring DSL中,你可以这样做(伪代码)
型
你也可以在这个链接http://camel.apache.org/content-enricher.html上看看更丰富的模式。基本上我建议的是遵循更丰富的模式。如果你能告诉我你是如何向 Camel 发送消息的,那么我可能会帮助更多。
希望这给予你一些想法,如果有语法错误等代码对不起,我在一个公共汽车站,没有时间检查它。
nbnkbykc4#
我更喜欢将这种类型的逻辑直接写在路由定义中,而不是写在
Processor
中。下面是Camel DSL方法,它使用Predicate
来确定主体类类型。它假设您已经将Exchange
主体转换为Student
或Employee
对象。字符集
如果你要在整个路由中对主体执行各种转换,在不同的阶段产生各种
Student
或Employee
对象类型(例如,Student
然后是StudentEntity
等),那么在路由的开头将类型保存在头部或属性中作为一些String常量可能是更干净的方法。型
最后,您可能能够在处理器中完成所有工作,但我认为这种结合了服务调用的分支逻辑是Camel反模式。
型