Apache camel setHeader和recipientList在Apache Camel中有什么用途?
输入XML格式Apache camel setHeader和recipientList在Apache Camel中有什么用途?,apache-camel,Apache Camel,输入XML格式 from("file:src/data?noop=true").to("jms:incomingOrders"); // content-based router from("jms:incomingOrders") .choice() .when(header("CamelFileName").endsWith(".xml")) .t
from("file:src/data?noop=true").to("jms:incomingOrders");
// content-based router
from("jms:incomingOrders")
.choice()
.when(header("CamelFileName").endsWith(".xml"))
.to("jms:xmlOrders")
.when(header("CamelFileName").regex("^.*(csv|csl)$"))
.to("jms:csvOrders")
.otherwise()
.to("jms:badOrders");
from("jms:xmlOrders")
.setHeader("customer", xpath("/order/@customer"))
.process(new Processor() {
public void process(Exchange exchange) throws Exception {
String recipients = "jms:accounting";
//System.out.println("hii1"+recipients);
String customer = exchange.getIn().getHeader("customer", String.class);
//System.out.println("hii2"+customer);
if (customer.equals("honda")) {
recipients += ",jms:production";
//System.out.println("hii3"+recipients);
}
exchange.getIn().setHeader("recipients", recipients);
}
})
.recipientList(header("recipients"));
// test that our route is working
from("jms:accounting").process(new Processor() {
public void process(Exchange exchange) throws Exception {
System.out.println("Accounting received order: "
+ exchange.getIn().getHeader("CamelFileName"));
}
});
from("jms:production").process(new Processor() {
public void process(Exchange exchange) throws Exception {
System.out.println("Production received order: "
+ exchange.getIn().getHeader("CamelFileName"));
}
});
}
});
我是Apache Camel的新手,所以请帮助我在这里指导代码。此代码复制自Camel in Action,并解释了基于相同EIP的收件人列表的使用。所以,在基于xml和csv进行划分之后,它被传递到recipientList,在那个里我正在努力使用
集标题
及
.收件人列表(标题(“收件人”)
因此,如果有人能向我解释一下流程,我会很有帮助。如果您需要将您的消息广播给多个收件人
是用于静态收件人集的模式:多播
是用于动态收件人集的模式。在这种情况下,您需要告诉Camel在哪里找到/如何评估!在运行时此收件人列表。表达这一点的方法有很多种,其中一种是:“请查看包含确切列表的消息头名称‘foo’”。但是,当然,骆驼路线必须准备/填充(在运行时)标题内容 (在您的示例中,在 进程(新处理器(){…}步骤)recipientList
是用于静态收件人集的模式:多播
是一组动态的收件人使用的模式。在这种情况下,您需要在运行时告诉Camel在何处查找/如何评估!此收件人列表。有很多种表达方式,其中一种是:“请查看包含确切列表的消息头名称‘foo’”。但当然,您的骆驼路线必须准备/填充(在运行时)头内容 (在您的示例中,在 进程(新处理器(){…}步骤)recipientList
customer
是在Java DSL中设置的。setHeader(“customer”,xpath(“/订单/@customer”)
并用于处理器exchange.getIn().getHeader(“customer”,String.class)
…而头收件人
是在Processor中设置的,并在收件人列表
中使用。我不明白是什么让你感到困惑。但setHeader的确切用途是什么?他为什么要添加带有客户名称的头?在链中的下一个位置使用它???除了“exchange.getIn().setHeader(“收件人”)之外“怎么做?为什么要再次设置头?@smitshah headercustomer
是在Java DSL中设置的。setHeader(“customer”,xpath(/order/@customer”)
用于处理器exchange.getIn().getHeader(“customer”,String.class)
…而头收件人
是在处理器中设置的,并在收件人列表
中使用。我不明白是什么让您感到困惑。
<?xml version="1.0" encoding="UTF-8"?>
<order name="motor" amount="1000" customer="honda"/>