我有4天的经验与Apache Camel ,因此这个问题。
我想做的是添加拦截器,如果满足条件,在端点 * 之后 * 触发该拦截器 *。
我可以通过执行以下操作添加AFTER端点拦截器:
interceptSendToEndpoint(ENDPOINT_1)
.skipSendToOriginalEndpoint()
.to(ENDPOINT_1)
.afterUrl(AFTER_ENDPOINT_1);
我假设,如果我想向这个链添加条件,我会这样写:
interceptSendToEndpoint(ENDPOINT_1)
.skipSendToOriginalEndpoint()
.choice()
.when(conditionIsMet).to(ENDPOINT_1).afterUrl(AFTER_ENDPOINT_1)
.otherwise(ENDPOINT_1);
但Apache Camel 公司的API却不这么想。)(像苹果一样)
所以我试图达到的逻辑是:如果满足条件-则应执行AFTER_ENDPOINT_1,如果不满足条件,则应不执行AFTER_ENDPOINT_1。
在这种情况下,你能帮助我写些什么吗?也许我误用了拦截器--在这种情况下,请给我指引正确的道路。
2条答案
按热度按时间laik7k3q1#
你很接近,但你可以离开的选择,否则部分时,使用拦截。
假设您有direct:start消费者终结点,并且希望在body包含单词hello时拦截消息,您可以简单地执行以下操作:
有关条件拦截的更多信息,请参阅此处和此处。
kadbb4592#
经过2天的测试,我得出结论,最好的方法是这样做:
有这样的路线:
对于配置,这是条件MET时的输出:
TO终结点表示为 void 类型的简单@Consume注解方法,其中只有一个
呼叫。
当不满足条件时,输出为:
两个输出均符合预期。
正如问题所述:现在,当条件为MET时,执行将进入ENDPOINT_2(仅一次)和AFTER_URI。
当条件为NOT MET时,则仅在ENDPOINT_2中执行,而不命中AFTER_URI。
这里有一个链接到回购协议的例子不同的拦截方法。这些例子是由我的同事Tarun,我只是增加了一个例子,看起来是一个最好的选择,我在这里提出的同一个例子作为答案。谢谢Tarun你的帮助。
下面是源代码的链接和示例:https://github.com/ffatheranderson/taruns_apache_camel_examples