我使用Camel组件Vertx:http://camel.apache.org/vertx.html
Camel中设置的标头不会发送到eventBus地址:
from("direct:inbound")
.setHeader("myHeader").constant("myHeaderValue")
.to("vertx:inboundAddress");
inboundAddress没有收到标题" myHeader"。
我已经检查了Vertx组件中VertxProducer的代码,它实际上只发送了正文。是否有任何理由没有将标题发送到eventBus?
顺便说一句,关于GitHub的文档更新更新:https://github.com/apache/camel/blob/master/components/camel-vertx/src/main/docs/vertx-component.adoc
答案 0 :(得分:1)
我同意应该通过骆驼访问vertx标头。如果有人希望以正式的方式获得支持,我很想知道。在此之前,有一个简单的解决方法。不仅传递消息中的正文,还传递标头和正文作为消息正文,并且两者都可以访问。
JsonObject message = new JsonObject();
message.put("body", routingContext.getBodyAsJson());
DeliveryOptions d = new DeliveryOptions()
.addHeader("myheader", "myheadervalue")
.addHeader("h2", "h2value");
message.put("deliveryOptions", d.toJson());
vertx.eventBus().send("myVertxEndpoint",
message,...
稍后在骆驼中,您可以在路由中调用类似于以下方法的方法,以将Vertx标头放入骆驼标头中。
public void setVertxHeaders(@Body JsonObject jsonObject, Exchange exchange ) {
exchange.getIn().getHeaders()
.putAll(jsonObject.getJsonObject("deliveryOptions").getJsonObject("headers")
.getMap());
}
答案 1 :(得分:0)
您正在错误地设置标题 而不是
.setHeader("myHeader").constant("myHeaderValue")
待办事项
.setHeader("myHeader", constant("myHeaderValue"))
请参阅他们的测试套件以获取更多参考: https://github.com/apache/camel/blob/3505e718db48cc0d8be5b47f6c4030c958d93a5f/camel-core/src/test/java/org/apache/camel/component/bean/BeanWithAnnotationInheritedTest.java