如何在同步(双向)骆驼路线中响应多条消息?

How to respond with multiple messages in a sync (two-way) camel route?

我想模拟接受包含 xml 消息的 tcp 请求的 Apache Camel 路由。

每条消息都可能导致大量响应,这些响应应在传入套接字上发回。我在同步模式下玩过 camel-netty 组件,它适用于单个消息。 但是是否可以在套接字上发回多条消息?基本上是return.

之前的拆分
from(String.format("netty:tcp://0.0.0.0:%s?sync=true&decoders=#length-decoder,#string-decoder&encoders=#string-encoder,#length-encoder", INBOUND_PORT))
            .id("my-mock")
            .unmarshal(jaxbDataFormat)
            .process(exchange -> {
                List<String> responses = service.accept(exchange.getIn().getBody(MyXmlRootElement.class));
                exchange.getOut().setBody(responses);
            })
            .split().body()  //Split is not doing what it should. Should become multiple messages, and each should be returned with a delay
            .delay(2000);

我的消息是长度编码的,前 4 个字节包含一个整数,用于指定每条消息的长度。

在我的例子中,异常是 IllegalArgument,表明端点不支持 ArrayList 作为有效负载。

Caused by: [java.lang.IllegalArgumentException - unsupported message type: class java.util.ArrayList]
at org.apache.camel.component.netty.handlers.ServerResponseFutureListener.operationComplete(ServerResponseFutureListener.java:53) ~[camel-netty-2.16.0.jar:2.16.0]
at org.jboss.netty.channel.DefaultChannelFuture.notifyListener(DefaultChannelFuture.java:409) [netty-3.10.4.Final.jar:na]
at org.jboss.netty.channel.DefaultChannelFuture.notifyListeners(DefaultChannelFuture.java:395) [netty-3.10.4.Final.jar:na]

干杯。

这不是它的设计方式,netty 上的同步选项用于在路由结束时发送一条响应消息。

我也为单个消息设计了这个,并且有效。对于多个响应消息,您可以尝试将它们聚合为一个并将其发送回客户端。假设在您的情况下可以进行偏离路线的聚合。