我们需要保证发送Web服务请求。步骤如下:
问题在于步骤#2的实施(即轮询)。 这个用例看起来很常见,我认为应该已经准备好了解决方案。因此,我希望只向Web服务发送一个请求,所有其他逻辑(即其保证交付)将由某个框架执行。
你知道这样的解决方案吗?
有“Guaranteed delivery”EIP模式,Camel支持它。但我没有找到任何有关Camel如何支持它的信息以及它是否适合我们的情况。
我们的要求 - Java,SOAP,开源解决方案。 我们计划使用Apache CXF,但这并不重要。
最后的话: 提供了两个很好的答案:
不幸的是我不能选择两个答案作为最终答案,所以我选择了Brian的第一个,因为它是第一个,他提供了一个非常好的解释,帮助我看到另一个可能的问题:-) 谢谢你们!
答案 0 :(得分:4)
除了简单地在某种循环中编写请求之外,您可以查看Spring Retry等框架。
它允许您定义重试策略,以考虑退避策略,超时以及何时/何时不尝试重试。最后一个要素至关重要。如果您无法首先连接,则重试是可行的。另一方面,如果您连接并发送请求但未收到确认,那么您需要了解重试是否合适。在这种情况下,idempotency of requests的概念很重要。
幂等HTTP方法是一种可以多次调用的HTTP方法 时间没有不同的结果。如果该方法是无关紧要的 只召唤一次,或十次。结果应该是一样的。 同样,这仅适用于结果,而不适用于资源本身。这个 仍然可以被操纵(如更新时间戳,提供此 信息不会在(当前)资源表示中共享。
答案 1 :(得分:4)
在Apache-CXF中,可以使用org.apache.cxf.clustering.RetryStrategy在目标端点关闭时进行消息传递重试 类和扩展。 请参阅:http://cxf.apache.org/docs/failoverfeature.html
这是主运行时cxf库的一部分,cxf-rt-features-clustering.jar,甚至可以在OSGi /非OSGi或Camel环境中工作。