如何从一条路线到另一条路线 - Camel JavaDsl
How to get headers from one route to another route - Camel JavaDsl
我有两个参数的骆驼休息端点,当我发送请求时,它激活第一条路线("direct:amq"),我从 activeMq 收到消息。
这里的headers没问题,但是这条路由激活了另一条路由("direct:post)"和那里的headers不见了。
我想获取从第一个路由到第二个路由的 urlToPost Header。
rest("/getFromActiveMq").produces("application/json")
.get()
.param()
.name("urlToPost")
.type(RestParamType.query)
.dataType("String")
.endParam()
.param()
.name("getactivemq")
.type(RestParamType.query)
.dataType("String")
.endParam()
.to("direct:amq");
from("direct:amq").streamCaching()
.startupOrder(2)
.log("My activemq is " + "${in.header.getactivemq}")
.log("My urlToPost is " + "${in.header.urlToPost}")
.setHeader("myHeader")
.header("${in.header.urlToPost}")
.log("My urlToPost Changed header is " + "${header.myHeader}")
.process(exchange -> {
String header = exchange.getIn().getHeader("urlToPost", String.class);
System.out.println(header);
exchange.getIn().setHeader("myShittyHeader", header);
Map<String, Object> hdr = exchange.getIn()
.getHeaders();
for (Map.Entry<String, Object> entry : hdr.entrySet()) {
System.out.println(entry.getKey() + "/" + entry.getValue());
}
})
.pollEnrich()
.simple("activemq://${in.header.getactivemq}")
.onCompletion()
.log("My body is : " + "${body}")
.to("direct:post");
from("direct:post").tracing()
.process(exchange -> exchange.getIn()
.setBody(exchange.getIn()
.getBody()))
.convertBodyTo(String.class)
.process(exchange -> {
Map<String, Object> hdr = exchange.getIn()
.getHeaders();
for (Map.Entry<String, Object> entry : hdr.entrySet()) {
System.out.println(entry.getKey() + "/" + entry.getValue());
}
})
.log("My urlToPost BEFORE SETTING HEADERS is " + "${in.header.urlToPost}")
.setHeader("Content-Type", constant("application/json"))
.setHeader("Accept", constant("application/json"))
.setHeader(Exchange.HTTP_METHOD, constant("POST"))
.log("My urlToPost AFTER SETTING HEADERS is " + "${in.header.urlToPost}")
// .log("My HTTP_URI is: " + "${in.header.urlToPost}")
// .to("http4://urlToPost")
// .to("direct:nothing");
.enrich()
.simple("http4://urlToPost");
我发现之后:
.pollEnrich()
.simple("activemq://${in.header.getactivemq}")
Header都不见了
pollEnrich merges your current Exchange with another message. That means it is in effect an Aggregator。
如果您不提供聚合策略,Camel 默认使用简单的body 聚合。这就是您失去 headers 的原因。
您必须配置 pre-existing 或实施您自己的 聚合策略,以在聚合期间尊重一条或两条消息的 headers。
我有两个参数的骆驼休息端点,当我发送请求时,它激活第一条路线("direct:amq"),我从 activeMq 收到消息。
这里的headers没问题,但是这条路由激活了另一条路由("direct:post)"和那里的headers不见了。
我想获取从第一个路由到第二个路由的 urlToPost Header。
rest("/getFromActiveMq").produces("application/json")
.get()
.param()
.name("urlToPost")
.type(RestParamType.query)
.dataType("String")
.endParam()
.param()
.name("getactivemq")
.type(RestParamType.query)
.dataType("String")
.endParam()
.to("direct:amq");
from("direct:amq").streamCaching()
.startupOrder(2)
.log("My activemq is " + "${in.header.getactivemq}")
.log("My urlToPost is " + "${in.header.urlToPost}")
.setHeader("myHeader")
.header("${in.header.urlToPost}")
.log("My urlToPost Changed header is " + "${header.myHeader}")
.process(exchange -> {
String header = exchange.getIn().getHeader("urlToPost", String.class);
System.out.println(header);
exchange.getIn().setHeader("myShittyHeader", header);
Map<String, Object> hdr = exchange.getIn()
.getHeaders();
for (Map.Entry<String, Object> entry : hdr.entrySet()) {
System.out.println(entry.getKey() + "/" + entry.getValue());
}
})
.pollEnrich()
.simple("activemq://${in.header.getactivemq}")
.onCompletion()
.log("My body is : " + "${body}")
.to("direct:post");
from("direct:post").tracing()
.process(exchange -> exchange.getIn()
.setBody(exchange.getIn()
.getBody()))
.convertBodyTo(String.class)
.process(exchange -> {
Map<String, Object> hdr = exchange.getIn()
.getHeaders();
for (Map.Entry<String, Object> entry : hdr.entrySet()) {
System.out.println(entry.getKey() + "/" + entry.getValue());
}
})
.log("My urlToPost BEFORE SETTING HEADERS is " + "${in.header.urlToPost}")
.setHeader("Content-Type", constant("application/json"))
.setHeader("Accept", constant("application/json"))
.setHeader(Exchange.HTTP_METHOD, constant("POST"))
.log("My urlToPost AFTER SETTING HEADERS is " + "${in.header.urlToPost}")
// .log("My HTTP_URI is: " + "${in.header.urlToPost}")
// .to("http4://urlToPost")
// .to("direct:nothing");
.enrich()
.simple("http4://urlToPost");
我发现之后:
.pollEnrich() .simple("activemq://${in.header.getactivemq}")
Header都不见了
pollEnrich merges your current Exchange with another message. That means it is in effect an Aggregator。
如果您不提供聚合策略,Camel 默认使用简单的body 聚合。这就是您失去 headers 的原因。
您必须配置 pre-existing 或实施您自己的 聚合策略,以在聚合期间尊重一条或两条消息的 headers。