聚合来自异步发布订阅通道的响应

时间:2017-06-02 12:48:50

标签: spring spring-integration

我需要异步调用4个Web服务并将结果聚合到单个消息中。如果其中一个服务需要更多时间来响应而不是指定的超时(3秒),那么已经到达的剩余响应应该聚合并且已经过时即将发布的消息应该被丢弃为此,我在spring配置文件中使用了下面的代码片段

<int:aggregator input-channel="aggregatorInputChannel" group-timeout="3000"  send-partial-result-on-expiry="true" expire-groups-upon-completion="true"  output-channel="aggregatorOutputChannel"  ref="responseAggregator"   method="populateResponseHeader" >
</int:aggregator> 

当其中一个Web服务(比如说service4)调用花费的时间超过超时值时,service4的线程将继续在后台运行,服务器发送202响应。关于我应该如何修改聚合器以忽略超时超时并得到响应的消息的任何建议?

1 个答案:

答案 0 :(得分:0)

首先,您应该了解Scatter-Gather模式。 看起来它足以满足您的用例。

您应该使用 driverElement = driver.findElement(By.xpath("//span[text()='Add Photo']")); actions.moveToElement(driverElement).click().build().perform(); //click button for modal window //find the image and upload it pathToImage = new StringSelection("C:\\path\\to\\image"); Toolkit.getDefaultToolkit().getSystemClipboard().setContents(pathToImage, null); bot = new Robot(); Thread.sleep(500); bot.keyPress(KeyEvent.VK_CONTROL); bot.keyPress(KeyEvent.VK_V); bot.keyRelease(KeyEvent.VK_CONTROL); bot.keyRelease(KeyEvent.VK_V); Thread.sleep(500); bot.keyPress(KeyEvent.VK_ENTER); bot.keyRelease(KeyEvent.VK_ENTER);

expire-groups-upon-timeout="false"