Spring集成asyc流

时间:2016-03-03 22:59:40

标签: java spring spring-integration

我需要我的spring集成项目,当用户进行一次静音调用时需要给出状态,对于此调用,服务器执行一些处理n计算一个状态,如果状态成功则应该重新调回状态然后我需要调用第三方服务,但这对用户是透明的(第三方应该是异步的)我如何在spring集成中实现

1 个答案:

答案 0 :(得分:2)

我希望您使用public class Codechef { public static void main(String[] args) { double centerLat = Math.toRadians(44.507693); double centerLng = Math.toRadians(34.152739); double diameter = 1; // diameter of circle in km double dist = diameter / 6371.0; // start generating KML System.out.println("<kml xmlns=\"http://www.opengis.net/kml/2.2\">\n"+ "<Placemark><Polygon><outerBoundaryIs><LinearRing><coordinates>"); for (int x = 0; x <= 360; x ++) { double brng = Math.toRadians(x); double latitude = Math.asin(Math.sin(centerLat) * Math.cos(dist) + Math.cos(centerLat) * Math.sin(dist) * Math.cos(brng)); double longitude = centerLng + Math.atan2(Math.sin(brng) * Math.sin(dist)* Math.cos(centerLat), Math.cos(dist) - Math.sin(centerLat) * Math.sin(latitude)) ; System.out.printf(" %f,%f", Math.toDegrees(longitude), Math.toDegrees(latitude)); } System.out.println("</coordinates></LinearRing></outerBoundaryIs></Polygon>"); System.out.println("</Placemark></kml>"); } } 作为您的REST服务。

在这种情况下,您期望<int-http:inbound-gateway>中的响应。

通常透明地回复我们应该只使用标题中的那个频道。

所有Spring Integration请求 - 回复组件在未提供TemporaryReplyChannel时执行此操作。这应该是有机的:我们没有任何事可做,所以将outputChannel的缺席视为流程的终结。如果标题中有outputChannel,我们会将结果发回给来电者。在你的情况下进入HTTP响应。

看起来现在已经适合你了。

为了实现您的异步要求,我建议replyChannelPublishSubscribeChannel之类的内容能够向多个订阅者发送相同的消息并以并行方式执行此操作。

关于此事的XML配置可能如下所示:

TaskExecutor

<service-activator input-channel="lastProcessChannel" output-channel="3rdPartyChannel"/> <publish-subscribe-channel id="3rdPartyChannel" task-executor="taskExecutor"/> <bridge input-channel="3rdPartyChannel"/> <service-activator input-channel="3rdPartyChannel"/> executor <int-http:inbound-gateway>将等待回复,因此我们async <bridge>将结果生成{{1}不会有任何损害来自不同的线程。

应该从replyChannel调用您的第三方服务,<service-activator>是同一<publish-subscribe-channel>的第二个订阅者。