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

时间:2015-10-23 17:31:31

标签: sockets apache-camel netty

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

每条消息都可能导致大量响应,应该在传入套接字上发回。我已经在同步模式下使用了camel-netty组件,该模式适用于单个消息。 但是可以在套接字上发回多条消息吗?返回前基本上是分裂。

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]

干杯。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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