gpt4 book ai didi

wso2 ESB : Split/Gather Pattern - Single Response

转载 作者:行者123 更新时间:2023-12-04 15:45:09 26 4
gpt4 key购买 nike

这是不是问题 而是一个 回答 .我对 wso2 ESB 很陌生,并希望进行测试运行,将拆分/收集 EIP 作为 POC 的一部分实现。
我按照我找到的示例进行操作,并立即得到一个返回单个响应的工作配置。然而,要得到所有的回应需要相当长的时间来弄清楚。大多数给定的样本似乎都产生了相同的意外结果。我希望如果您遇到同样的问题,这些线路会对您有所帮助。

设置

我用了 soapUI 示例服务 (搜索操作)作为服务后端。我发送了一条合并消息,搜索 两件 到代理服务器(见下面的人工制品) 迭代中介 split 消息并将其转发到调用soapUI 模型的端点。 聚合中介等待所有响应并尝试将其放入一个结果消息中。

问题

尽管拆分器工作正常,聚合器返回 只有一个结果元素 不是预期的元素列表。所有日志都显示一切正常,几个请求被发送到相应的端点,但在最终响应中仍然只有返回的第一个响应可见。

解决方案

将代理的日志级别设置为 TRACE 后,我意识到聚合器工作得很好,只是它创建了一条并不真正符合 SOAP 的消息。全部 聚合元素已添加 皂体正下方 .所以问题是如何在 body 和 result 标签之间添加一个根元素。我首先尝试了 XSLT,但它也只能读取正文的第一个子元素。最后我找到了一些深埋的暗示 使用 丰富调解员 (或者更确切地说是一系列的),这就成功了。
以下列表解释了在大多数示例中找不到的配置部分(如下所示的代码)。

  • 首先使用 Enrich 将所有相关项目捕获到属性中
  • 忘记当前的消息 - 重写完整的信封
    正文仅包含新的有效负载根元素
  • 将存储在属性中的元素附加到新的负载根。
  • 如果需要,将soap header 捕获到一个属性中并将其附加到新的msg(不在下面的配置中)

  • 文物

    演示请求
    <body>
    <sam:multisearch xmlns:sam="http://www.example.org/sample/">
    <sam:search>
    <sessionid>123</sessionid>
    <searchstring>Item 1</searchstring>
    </sam:search>
    <sam:search>
    <sessionid>123</sessionid>
    <searchstring>Item 2</searchstring>
    </sam:search>
    </sam:multisearch>
    </body>

    配置
    <proxy xmlns="http://ws.apache.org/ns/synapse" name="test.multisearch" transports="https,http" statistics="enable" trace="enable" startOnLoad="true">
    <target>
    <inSequence>
    <iterate xmlns:sam="http://www.example.org/sample/" expression="//sam:multisearch/sam:search">
    <target>
    <sequence>
    <send>
    <endpoint key="soapUI_Mockup"/>
    </send>
    </sequence>
    </target>
    </iterate>
    </inSequence>
    <outSequence>
    <aggregate>
    <completeCondition>
    <messageCount min="-1" max="-1"/>
    </completeCondition>
    <onComplete xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sam="http://www.example.org/sample/" expression="//sam:searchResponse">
    <enrich>
    <source clone="true" xpath="$body//item"/>
    <target type="property" property="ResultItems"/>
    </enrich>
    <log level="custom">
    <property name="ResultItems" expression="get-property('ResultItems')"/>
    </log>
    <enrich>
    <source type="inline" clone="true">
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header/>
    <soapenv:Body>
    <sam:GenericDataResponse/>
    </soapenv:Body>
    </soapenv:Envelope>
    </source>
    <target type="envelope"/>
    </enrich>
    <enrich>
    <source type="property" clone="true" property="ResultItems"/>
    <target action="child" xpath="//sam:GenericDataResponse"/>
    </enrich>
    <send/>
    </onComplete>
    </aggregate>
    </outSequence>
    </target>
    <description></description>
    </proxy>

    最后一个问题

    如果有人可以向我提示一些文档,或者给我一些聚合介体的 correlateOn 属性的工作配置,我将非常感激。

    最佳答案

    您需要做的是,提及迭代器中介器中的任何 id(请参阅迭代器中介器文档),并在聚合器中介器中引用相同的 id 作为相关 id。就是这样。 ——

    关于wso2 ESB : Split/Gather Pattern - Single Response,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17903010/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com