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

Apache Camel EIP路由-如何停止拆分()

俞新翰
2023-03-14

我对以下路线有一些问题:

// from("cxf:....")...
from("direct:start").process(startRequestProcessor) // STEP 1
            .choice()
                .when(body().isNull())
                        .to("direct:finish")
                .otherwise()
                    .split(body())  // STEP 2
                    .bean(TypeMapper.class) // STEP 3
                    .log("Goes to DynamicRouter:: routeByTypeHeader with header: ${headers.type}")
                    .recipientList().method(Endpoint1DynamicRouter.class, "routeByTypeHeader") // STEP 4
                    .ignoreInvalidEndpoints();

    from("direct:endpoint2") // STEP 6
            .log("Goes to DynamicRouter::routeByCollectionHeader with header: ${headers.collection}")
            .recipientList().method(Endpoint2DynamicRouter.class, "routeByCollectionHeader")
            .ignoreInvalidEndpoints();

    from("direct:endpoint1.1") // STEP 5
            .process(new DateRangeProcessor())
            .to("direct:collections");

    from("direct:endpoint1.2") // STEP 5
            .process(new SingleProcessor())
            .to("direct:collections");


    from("direct:endpoint2.2") // STEP 7
            .aggregate(header("collection" /** endpoint2.2 */), CollectionAggregationStrategy)
            .completionSize(exchangeProperty("endpoint22"))

            .process(new QueryBuilderProcessor())
            .bean(MyService, "getDbCriteria")

            .setHeader("collection", constant("endpoint2.1"))
            .to("direct:endpoint2.1").end();


    from("direct:endpoint2.1") // STEP 8
            .aggregate(header("collection" /** endpoint2.1 */), CollectionAggregationStrategy)
            .completionSize(exchangeProperty("CamelSplitSize"))
            .to("direct:finish").end();

    from("direct:finish")
            .process(new QueryBuilderProcessor())
            .bean(MyRepository, "findAll")
            .log("ResponseData: ${body}").
            marshal().json(JsonLibrary.Gson).end();

路线

  1. 接收json字符串并将其转换为JSONObject的列表(HashSet)。
  2. 将收到的列表分割为json对象。
  3. 根据对象内容设置相应的头
  4. 根据报头将消息路由到endpoint 1.1或endpoint 1.2
  5. 将消息转换为mongodb标准并发送到endpoint 2
  6. endpoint2根据另一个报头将消息路由到endpoint2.1或endpoint2.2。
  7. Endpoint 2.2聚合所有接收到的消息,处理它以获得mongodb标准并将其发送到endpoint 2.1(在步骤2中计算完成大小并保存在属性endpoint 22中)。
  8. Enpoint 2.1聚合所有消息(CamelSplitsize)将聚合消息转换为查询对象,并将其发送到存储库以检索数据。

我可以在调试器中看到有效的响应对象,但无论如何我都会遇到一个错误:

未找到java类的消息正文编写器。util。HashSet,ContentType:application/json

问题不在response对象中,因为它与其他路由一起工作,并且它不包含哈希集。

我猜route会将在第1步创建的哈希集发送到输出。。。

我的问题是:

>

  • 路由输出出了什么问题?
  • 两个接收者列表()都尝试将消息转发到无效的终结点(我必须使用。

    组织。阿帕奇。骆驼NoSuchEndpointException:找不到:org的终结点。springframework。数据mongodb。果心查询Criteria@20f55e70,请检查您的类路径是否包含所需的Camel组件jar。

    任何帮助都将不胜感激!谢谢

  • 共有1个答案

    孟花蜂
    2023-03-14

    我觉得很奇怪,但是。聚合()函数不回复交换。它使用聚合策略,但总是回复传入的交换。这在阅读留档时不清楚,但你必须使用聚合策略和分裂()才能返回交换。

     类似资料:
    • ``` 所以,我的问题是--有没有一种干净的方法来结构和重构路由,而不是将它们集中在一个大的路由定义中?我也许可以创建一个参与者(路由器)的层次结构,主路由定义只是将其委托给路由器,随着我们深入参与者层次结构,我们会逐步添加更多的细节。但是否有一两种普遍接受的模式来组织路线呢?

    • 我对JSONPath的工作有意见。我有两个非常相似的json对象,我正试图从中获取值。 本质上,对象大致看起来像这样: 我的问题是我需要运行这两条路径。对于Object2,这不会引起任何问题,因为第一个jsonpath不返回任何内容。 但是,对于object1,jsonpath 1返回所需的值。但是,对于该记录,jsonpath2还返回值Object。 有没有办法阻止这种事情发生?我需要两个jso

    • 问题内容: 该程序在九次打印后完成: 如何停止进程(例如eclipse中的Java进程),因为它在9秒的时间限制后没有停止? 问题答案: 您遇到的问题是,取消哔声任务后,调度程序会保留活动线程。 如果存在活动的非守护程序线程,则JVM保持活动状态。 它使该线程保持不变的原因是您已在此行中告诉它这样做: 请注意以下文档: -即使在空闲状态下要保留在池中的线​​程数。 因此,您有两种可能的方法来导致J

    • 问题内容: 我有一个goroutine,它调用一个方法,并在通道上传递返回的值: 如何停止这种goroutine? 问题答案: 编辑: 在意识到您的问题是关于将值发送到goroutine中的chan之前,我匆忙编写了此答案。 下面的方法可以与上面建议的其他chan一起使用,或者利用您已经拥有的chan双向的事实,您可以只使用一个… 如果您的goroutine仅用于处理来自chan的项目,则可以使用

    • 问题内容: 要找出mysqld的启动命令(使用Mac),我可以这样做: 我得到以下输出,这使我可以启动mysql服务器。 我如何找到必要的命令以从命令行停止mysql? 问题答案: 尝试: 要么: 要么: 要么: 如果 在OSX中 安装 Launchctl,则 可以尝试: MacPorts 注意:重新启动后,此设置将持续存在。 家酿 二进制安装程序 我发现在:https : //stackover

    • 我在研究项目中使用GraphDB Free 8.4.1,有时它会在没有任何明显原因的情况下被卡住。进程正在运行,但无法连接到存储库,甚至无法从工作台连接。它只是停止了反应。 我必须杀死GraphDB,然后再次运行它。 我知道,那个免费版本只允许2个并行查询,但我不认为它会卡住。我试图通过制作30个并行SPARQL查询来重现这一点,但一切都很好。 没有异常,错误日志中没有任何内容,主日志中没有任何内