当前位置: 首页 > 知识库问答 >
问题:

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

顾靖
2023-03-14

我想建模一个接受包含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);

在我的例子中,异常是IllegalArgument,说明endpoint不支持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]

干杯。

共有1个答案

卢志行
2023-03-14

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

 类似资料:
  • 我正在尝试实现一个非常简单的骆驼路由,即从CXFendpoint接收请求,并将其放置在队列中,以便稍后进行异步处理。一旦消息被放置在队列中,我需要能够向调用者发送一个响应,指示消息已被接收。我已经完成了教程,但似乎无法正确完成。所发生的情况是,一旦消息被放置在队列中,在消息从队列处理到其预期目的地之前,不会向调用者发送响应。 下面的代码

  • 我正在研究一个骆驼原型,它在同一骆驼环境中使用两个起点。 第一个路由使用用于“配置”应用程序的消息。消息通过配置服务bean加载到配置存储库中: 第二个路由实现了收件人列表eip模式,将不同类型的输入消息传递给许多收件人,这些收件人从同一个配置存储库中按顺序读取: 现在出现的问题是如何同步它们,因此如果第一个路由正在处理新数据,则第二个路由“等待”。 我是Apache Camel的新手,对如何处理

  • null 我希望每隔5分钟轮询这个队列(使用Camel-Quartz),并将这些consumes消息主体中找到的字符串(fizz、buzz等)合并到JDBC语句中,该语句查找与字符串(例如fizz或buzz)匹配的任何

  • 我正在尝试Apache Camel技术,但遇到了麻烦。 我使用Jpa组件的轮询消费者as from(),并将实体上的@consumed注释设置为在流程结束时将其状态更改为“已成功处理”。它很好用。 但如果出现任何错误,我不想在数据库中设置“已成功处理”标志,而是设置“错误发生”之类的标志。 为了解决这个问题,我创建了一个带有处理器的“死信队列”,该处理器试图更改我正在进行的实体的状态,以便稍后保存

  • 我正在使用apache camel 3.8,并试图制作一个简单的tcp服务器,将请求消息发送回客户端(我使用的客户端是PacketSender)。 问题是,如果方法花费太长时间,15毫秒后netty会在后台返回一个空响应,即使仍在中。如果我不让方法(线程)Hibernate,响应会立即与接收到的内容一起发送。 我该如何管理它,netty正在等待我完成我的进程并发送我在交换消息正文中设置的响应? 以

  • 我已经和ApacheCamel合作了一段时间,做了一些基本的工作,但现在我正在尝试创建一个路由,在该路由中,我可以让多个“消费者”访问同一条路由,或者在路由中添加一个消费者,然后处理消息。 我的想法是拥有一个由事件触发的事件驱动消费者,然后例如从ftp读取文件。我正计划做这样的事情: 所以这个想法是我有一个事件(例如直接或来自消息队列),它具有“fileName”属性,然后使用该属性从ftp下载/