什么网站做宣传好,大战网站建设,网站php网站空间,网站必须做API接口吗async方法不调用了下一个示例将演示Spring容器内部的异步方法调用。 为什么我们需要异步方法调用#xff1f; 在某些情况下#xff0c;我们并不真正知道是否需要重播或何时应返回结果。 传统方式在Java EE世界中处理异步调用的方法是使用队列/主题。 我们可以在Spring中进行相… async方法不调用了 下一个示例将演示Spring容器内部的异步方法调用。 为什么我们需要异步方法调用 在某些情况下我们并不真正知道是否需要重播或何时应返回结果。 传统方式在Java EE世界中处理异步调用的方法是使用队列/主题。 我们可以在Spring中进行相同的操作但是如果需要简单的异步调用则可以按照以下步骤轻松地进行操作 1.声明 bean idexecutionLogicImplclasscom.test.components.execution_gateway.ExecutionLogicImplabstractfalse lazy-initdefault autowiredefault/bean2.声明具有返回类型的接口方法– FutureJava 5 有关Future对象的更多信息 http : //docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/Future.html public interface ExecutionLogic
{public FutureString doSomeExecutionLogic(String message);} *一旦GatewayProxyFactoryBean注意到返回类型为Future它将通过让AsyncTaskExecutor将方法切换到异步模式 3.我们将创建一个作业通道该通道将收集所有请求并将它们异步发送到另一个类ExecutionLogicImpl以便处理它们一些随机的业务逻辑 int:channel idjob1Channel /int:service-activator input-channeljob1Channel refexecutionLogicImpl methoddoSomeExecutionLogic / 类ExecutionLogicImpl public class ExecutionLogicImpl
{public String doSomeExecutionLogic(String msg){try{System.out.println(doing long work on messagemsg);Thread.sleep(8000);}catch (InterruptedException e){// TODO Auto-generated catch blocke.printStackTrace();}return msg _completed;}} 测试类别 import com.test.components.execution_gateway.ExecutionLogic;public class testExeceution{...
ExecutionLogic executionLogic;
public String sendMsgToExecutionQueue(String msg){FutureString processedMessage executionLogic.doSomeExecutionLogic(msg);String finalResult ;try{finalResult processedMessage.get(TIMEOUT, TimeUnit.SECONDS);return 1 final result: finalResult; // response;}catch (ExecutionException e){return 1 final result: e finalResult;// response;}catch (TimeoutException tex){return 1 final result: tex finalResult; // response;}catch (Exception ex){return 1 final result: ex finalResult;// response;}}
...
} *对于永远不会返回响应的情况可以使用Future对象启用超时。 那么这里发生了什么 我们发送要异步执行的输入。 一旦请求完成处理发送方即异步等待响应结果将被发送回发送方。 参考 IdanFridman.com博客上的JCG合作伙伴 Idan Fridman 在Spring中使用Future对象调用Async方法调用 。 翻译自: https://www.javacodegeeks.com/2013/06/invoking-async-method-call-using-future-object-in-spring.htmlasync方法不调用了