【问题标题】:Splitting Json Array and groupping in to multiple messages camel拆分 Json Array 并分组为多个消息骆驼
【发布时间】:2018-01-08 11:13:03
【问题描述】:

我正在使用 Jboss fuse 6.3 和 apache camel 2.17。我想在 camel spring dsl 中将一个巨大的 json 消息拆分为多个消息。

示例消息结构在此消息下方,我有 9 个国家/地区数组,我需要拆分为两个数组,因为 5 条消息最后一条消息仅包含一个数组。消息的顺序无关紧要。

输入信息:

[{
        "Cities": [{

            "name": "Paris",
            "lat": "45.75",
            "lng": "4.583333"
        }, {

            "name": "Marseille",
            "lat": "45.97",
            "lng": "4.54"
        }, {

            "name": "Lyon",
            "lat": "24.75",
            "lng": "4.75"
        }, {

            "name": "Toulouse",
            "lat": "37.75",
            "lng": "4.755"
        }, {

            "name": "Nice",
            "lat": "89.75",
            "lng": "4.77"
        }],
        "country": "FR"
    },
    {
        "Cities": [{

            "name": "Berlin",
            "lat": "45.75",
            "lng": "4.583333"
        }, {

            "name": "Hamburg",
            "lat": "45.97",
            "lng": "4.54"
        }, {

            "name": "Munich",
            "lat": "24.75",
            "lng": "4.75"
        }, {

            "name": "Cologne",
            "lat": "37.75",
            "lng": "4.755"
        }, {

            "name": "Frankfurt",
            "lat": "89.75",
            "lng": "4.77"
        }],
        "country": "DE"
    }, {
        "Cities": [{

            "name": "mumbai",
            "lat": "45.75",
            "lng": "4.583333"
        }, {

            "name": "Bangalore",
            "lat": "45.97",
            "lng": "4.54"
        }, {

            "name": "Delhi",
            "lat": "24.75",
            "lng": "4.75"
        }, {

            "name": "Chattisgarh",
            "lat": "37.75",
            "lng": "4.755"
        }, {

            "name": "Hyderabad",
            "lat": "89.75",
            "lng": "4.77"
        }],
        "country": "IN"
    }, {
        "Cities": [{

            "name": "Aberdeen",
            "lat": "45.75",
            "lng": "4.583333"
        }, {

            "name": "Armagh",
            "lat": "45.97",
            "lng": "4.54"
        }, {

            "name": "Bangor",
            "lat": "24.75",
            "lng": "4.75"
        }, {

            "name": "Bath",
            "lat": "37.75",
            "lng": "4.755"
        }, {

            "name": "Belfast",
            "lat": "89.75",
            "lng": "4.77"
        }],
        "country": "UK"
    }, {
        "Cities": [{

            "name": "Budapest",
            "lat": "45.75",
            "lng": "4.583333"
        }, {

            "name": "Debrecen",
            "lat": "45.97",
            "lng": "4.54"
        }, {

            "name": "Szeged",
            "lat": "24.75",
            "lng": "4.75"
        }, {

            "name": "Miskolc",
            "lat": "37.75",
            "lng": "4.755"
        }, {

            "name": "Pecs",
            "lat": "89.75",
            "lng": "4.77"
        }],
        "country": "HUNGARY"
    }, {
        "Cities": [{

            "name": "Alingsas",
            "lat": "45.75",
            "lng": "4.583333"
        }, {

            "name": "Arboga",
            "lat": "45.97",
            "lng": "4.54"
        }, {

            "name": "Arvika",
            "lat": "24.75",
            "lng": "4.75"
        }, {

            "name": "Askersund",
            "lat": "37.75",
            "lng": "4.755"
        }, {

            "name": "Avesta",
            "lat": "89.75",
            "lng": "4.77"
        }],
        "country": "SWEDEN"
    }, {
        "Cities": [{

            "name": "Amsterdam",
            "lat": "45.75",
            "lng": "4.583333"
        }, {

            "name": "Den Helder",
            "lat": "45.97",
            "lng": "4.54"
        }, {

            "name": "Edam",
            "lat": "24.75",
            "lng": "4.75"
        }, {

            "name": "Haarlem",
            "lat": "37.75",
            "lng": "4.755"
        }, {

            "name": "Purmerend",
            "lat": "89.75",
            "lng": "4.77"
        }],
        "country": "NETHERLANDS"
    }, {
        "Cities": [{

            "name": "Abrantes",
            "lat": "45.75",
            "lng": "4.583333"
        }, {

            "name": "Agualva-Cacem",
            "lat": "45.97",
            "lng": "4.54"
        }, {

            "name": "Agueda",
            "lat": "24.75",
            "lng": "4.75"
        }, {

            "name": "Albufeira",
            "lat": "37.75",
            "lng": "4.755"
        }, {

            "name": "Alcacer do Sal",
            "lat": "89.75",
            "lng": "4.77"
        }],
        "country": "PORTUGAL"
    }, {
        "Cities": [{

            "name": "Barcelona",
            "lat": "45.75",
            "lng": "4.583333"
        }, {

            "name": "madrid",
            "lat": "45.97",
            "lng": "4.54"
        }, {

            "name": "Saragossa",
            "lat": "24.75",
            "lng": "4.75"
        }, {

            "name": "Salamanca",
            "lat": "37.75",
            "lng": "4.755"
        }, {

            "name": "Granada",
            "lat": "89.75",
            "lng": "4.77"
        }],
        "country": "SPAIN"
    }
]

预期输出:

第一次拆分:

[{
        "Cities": [{

            "name": "Paris",
            "lat": "45.75",
            "lng": "4.583333"
        }, {

            "name": "Marseille",
            "lat": "45.97",
            "lng": "4.54"
        }, {

            "name": "Lyon",
            "lat": "24.75",
            "lng": "4.75"
        }, {

            "name": "Toulouse",
            "lat": "37.75",
            "lng": "4.755"
        }, {

            "name": "Nice",
            "lat": "89.75",
            "lng": "4.77"
        }],
        "country": "FR"
    },
    {
        "Cities": [{

            "name": "Berlin",
            "lat": "45.75",
            "lng": "4.583333"
        }, {

            "name": "Hamburg",
            "lat": "45.97",
            "lng": "4.54"
        }, {

            "name": "Munich",
            "lat": "24.75",
            "lng": "4.75"
        }, {

            "name": "Cologne",
            "lat": "37.75",
            "lng": "4.755"
        }, {

            "name": "Frankfurt",
            "lat": "89.75",
            "lng": "4.77"
        }],
        "country": "DE"
    }
]

第二次拆分:

[{
        "Cities": [{

            "name": "mumbai",
            "lat": "45.75",
            "lng": "4.583333"
        }, {

            "name": "Bangalore",
            "lat": "45.97",
            "lng": "4.54"
        }, {

            "name": "Delhi",
            "lat": "24.75",
            "lng": "4.75"
        }, {

            "name": "Chattisgarh",
            "lat": "37.75",
            "lng": "4.755"
        }, {

            "name": "Hyderabad",
            "lat": "89.75",
            "lng": "4.77"
        }],
        "country": "IN"
    },{
        "Cities": [{

            "name": "Aberdeen",
            "lat": "45.75",
            "lng": "4.583333"
        }, {

            "name": "Armagh",
            "lat": "45.97",
            "lng": "4.54"
        }, {

            "name": "Bangor",
            "lat": "24.75",
            "lng": "4.75"
        }, {

            "name": "Bath",
            "lat": "37.75",
            "lng": "4.755"
        }, {

            "name": "Belfast",
            "lat": "89.75",
            "lng": "4.77"
        }],
        "country": "UK"
    }
]

。 . .

第五次分裂:

[{
        "Cities": [{

            "name": "Barcelona",
            "lat": "45.75",
            "lng": "4.583333"
        }, {

            "name": "madrid",
            "lat": "45.97",
            "lng": "4.54"
        }, {

            "name": "Saragossa",
            "lat": "24.75",
            "lng": "4.75"
        }, {

            "name": "Salamanca",
            "lat": "37.75",
            "lng": "4.755"
        }, {

            "name": "Granada",
            "lat": "89.75",
            "lng": "4.77"
        }],
        "country": "SPAIN"
    }
]

我尝试在下面从 Ricardo 的帖子中引用 Apache Camel with Json Array split。但我不确定如何在 spring dsl 中配置聚合(AggregationStrategies.groupedExchange())。

骆驼路线:

<split streaming="true">
                    <jsonpath>$</jsonpath>
                    <aggregate completionTimeout="1000" completionSize="2" groupExchanges="true">

                    </aggregate>

                    <log message="${body}"></log>
                </split>

【问题讨论】:

标签: json apache-camel jbossfuse jsonpath


【解决方案1】:

这是一个简单的示例,说明如何使用 Spring DSL 拆分 JSON 数组:

<split>
    <jsonpath>$</jsonpath>
    <!-- Add rest of the logic here -->
</split>

【讨论】:

    【解决方案2】:

    来自上述问题的 Spring DSL 示例是这个:

    <camel:route>
        <camel:from uri="direct:start" />
        <camel:split streaming="true">
            <camel:jsonpath>$</camel:jsonpath>
            <camel:aggregate completionSize="5"
                completionTimeout="1000" groupExchanges="true">
                <camel:correlationExpression>
                    <camel:constant>true</camel:constant>
                </camel:correlationExpression>
                <camel:log message="${body}"></camel:log>
                <camel:to uri="mock:result"></camel:to>
            </camel:aggregate>
        </camel:split>
    </camel:route>
    

    有一个完整的实现示例here.

    groupExchange 属性只返回一个默认聚合策略:GroupedExchangeAggregationStrategy

    您可以实现自己的并将其作为 bean 参数传递给您的 DSL,如下所示:

    <camel:route>
        <camel:from uri="direct:start" />
        <camel:split streaming="true">
            <camel:jsonpath>$</camel:jsonpath>
            <camel:aggregate strategyRef="stringConcatStrategy" completionSize="5"
                completionTimeout="1000" >
                <camel:correlationExpression>
                    <camel:constant>true</camel:constant>
                </camel:correlationExpression>
                <camel:log message="${body}"></camel:log>
                <camel:to uri="mock:result"></camel:to>
            </camel:aggregate>
        </camel:split>
    </camel:route>
    

    干杯!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 2014-10-15
      • 2020-09-17
      • 2016-09-08
      • 2021-10-16
      • 2013-01-24
      相关资源
      最近更新 更多