Camel将修改后的身体发送到AMQ而不修改路线的身体

时间:2016-07-27 11:10:56

标签: java apache-camel protocol-buffers

我有一个rest-api,它创建一个资源并将其发送到AMQ队列。

我正在使用camel rest dsl并创建了类似的东西:

rest("/api")
            .consumes("application/json").produces("application/json")
                .post("/test").type(Test.class)
                    .route()
                    .to(ExchangePattern.InOnly, "direct:sendTestAmq")
                    .endRest()
from("direct:sendTestAmq")
            .convertBodyTo(TestProtos.Test.class)
            .marshal().protobuf()
            .to(ExchangePattern.InOnly, "amq:queue:test.queue");

当我调用端点时,我得到一个对应于protobuf二进制文件的base64响应。

我想获得Test.class json响应。 我认为使用“to(ExchangePattern.InOnly,...)”会允许不修改正文。

这是另一个example,回复是“之后”,我希望它是“之前”。

有人知道我该怎么做吗?

由于

1 个答案:

答案 0 :(得分:0)

根据@ClausIbsen的回答,我发现multicast()也为每条路线使用交换副本,但不是窃听,而是默认情况下不是平行的。

我可以通过.to(ExchangePattern.InOnly, "direct:sendTestAmq")替换multicast().to(ExchangePattern.InOnly, "direct:sendTestAmq", "direct:mock").end()来实现我的目标。

由于多播将最后一次路由交换作为输出,“direct:mock”是一种除了保留原始主体之外什么都不做的路由。