组件vert.x不传播标头

时间:2017-05-01 08:38:09

标签: apache-camel vert.x

我使用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

2 个答案:

答案 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