如何使用查询结果存储全局值并重用它来丰富每条消息

How to store a global value with query results and reuse it to enrich every message

我正在尝试实现一个简单的流式传输管道:

  1. 从远程 REST 端点获取用户列表,将列表拆分为单独的消息

  2. 对于每个用户,我必须使用来自 SQL 参数 table(部门)的信息来丰富它,例如:

初始消息(用户 1)

id:1
departmentId: 1
parentDepartmentId: 23

部门

Department 1
id: 1
name: Dep1
    
Department 2
id: 23
name: Dep23

丰富用户 1

id:1
departmentId: 1
departmentName: Dep1
parentDepartmentId: 23
parentDepartmentName: Dep23

路由上下文:

    <routeContext id="route1" xmlns="http://camel.apache.org/schema/spring">
        <route id="route1">
            <from id="_from1" uri="timer:mytimer"/>
            <setHeader headerName="CamelHttpMethod">
                <constant>POST</constant>
            </setHeader>
            <setHeader headerName="Content-Type">
                <constant>application/json</constant>
            </setHeader>
            <setBody>
                <simple>{ "new": "true" }</simple>
            </setBody>
            <to id="_apiCall1" uri="https4://myapi/v1/users/search"/>
            <split streaming="true">
                <simple>${body}</simple>
                <to uri="direct:processNewUser"/>
            </split>
        </route>
        <route id="processNewUser">
            <from uri="direct:processNewUser"/>
            <enrich strategyRef="myAggregationStrategy">
                <simple>sql:select * from departments"</simple>
            </enrich>
        </route>
    </routeContext>

我需要让整个部门 table 能够丰富用户信息,但我想避免对每条消息都这样做。

有没有办法存储 sql 查询的内容并在充实阶段重用它?

你不能先搞定部门吗?看来你可以做到。然后,您将结果设置为一个交换 属性 实例,并用它来丰富每个用户。

实际上有很多方法可以实现。