我正在寻找解决方案,通过在运行时动态决定的处理器发送邮件,具体取决于邮件头或主体上的某个属性。根据邮件正文或邮件头中的属性动态加载骆驼处理器
假设我有两个消息处理器(例如:Type1RequestProcessor
,Type2RequestProcessor
),如下所述。
我想要做的是在执行任一Type1RequestProcessor
Type2RequestProcesso
或中的R消息头OT体使用属性动态地决定的。(在这里,我不想创建每处理器类型的多个路由器。)
我试图如下所述(在标题中传递typeId)。但它显然给出了下面的错误说No bean could be found in the registry for: ${header.messageId}RequestProcessor of type: org.apache.camel.Processor
。
HTTPRouter.java
import javax.enterprise.context.ApplicationScoped;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.cdi.ContextName;
@ApplicationScoped
@ContextName("camel-cdi-context")
public class HTTPRouter extends RouteBuilder {
@Override
public void configure() throws Exception {
from("direct:oneRouter")
.process("${header.typeId}RequestProcessor")
.to("direct:anotherRouter");
}
}
错误:
org.apache.camel.FailedToCreateRouteException: Failed to create route route19 at: >>> process[ref:${header.messageId}RequestProcessor] <<< in route: Route(route19)[[From[direct:oneRouter]] -> [process[ref:${he... because of No bean could be found in the registry for: ${header.messageId}RequestProcessor of type: org.apache.camel.Processor
at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:1298)
at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:204)
at org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:1087)
at org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:3540)
at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:3271)
at org.apache.camel.impl.DefaultCamelContext.access$000(DefaultCamelContext.java:202)
我试图与Bean组件还,但结果是一样的。
任何人都可以在这里举手吗? 如何动态加载处理器?
Type1RequestProcessor.java
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
public class Type1RequestProcessor implements Processor {
public void process(Exchange exchange) throws Exception {
// Do Type1 process implementation
}
}
Type2RequestProcessor.java
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
public class Type2RequestProcessor implements Processor {
public void process(Exchange exchange) throws Exception {
// Do Type2 process implementation
}
}
注:我在路由器本身的工艺方法中的动态加载这些实施B计划(匿名内部类)。但我仍然在寻找这个,因为它完全符合我的要求。
- 骆驼版本:2.19.2
- WildFly版本:10.1.0
- 骆驼补丁版本: wildfly-骆驼膜片4.9.0
查看这个FAQ:http://camel.apache.org/how-to-use-a-dynamic-uri-in-to.html –
Thanx克劳斯易卜生,但我正在寻找动态加载处理器。不能动态地调用URI。如果我需要动态调用URI,我也可以使用toD(),因为我使用的是骆驼2.19。 – namalfernandolk