如何在同步(双向)骆驼路线中响应多条消息?
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 上的同步选项用于在路由结束时发送一条响应消息。
我也为单个消息设计了这个,并且有效。对于多个响应消息,您可以尝试将它们聚合为一个并将其发送回客户端。假设在您的情况下可以进行偏离路线的聚合。
我想模拟接受包含 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 上的同步选项用于在路由结束时发送一条响应消息。
我也为单个消息设计了这个,并且有效。对于多个响应消息,您可以尝试将它们聚合为一个并将其发送回客户端。假设在您的情况下可以进行偏离路线的聚合。