可以,就是调用者只能假设执行成功了,失败了也得不到反馈。可以把业务代码在子线程里执行,或者干脆放到一个队列,有另一个线程或程序读取这个队列并执行
您好,我想要做到的是,我收到别人发送的请求,先进行简单的检查,检查通过之后就发送响应回去,别人能够很快收到这个响应结果,但是我程序会接着处理相对应的业务代码。
原因:不想因为过长执行业务代码的时间,拖慢请求响应的总时间。
@隐语者: 可以把业务代码在子线程里执行,或者干脆放到一个队列,有另一个线程或程序读取这个队列并执行
@隐语者: 或者换一个思路,你还是这样处理,但是调用者异步调用,这样调用者不会卡顿,而且能得到反馈
@会长: @RequestMapping(value = "create", method = RequestMethod.POST)
@ResponseBody
public void addList(HttpServletRequest request, HttpServletResponse response){
//《业务代码...》
//发回响应
response.getWriter().write("success");
}
必须要等addList()这个方法执行完才能发送响应给对方吗?
@隐语者: 是啊,但是你这个方法可以很快返回,具体的处理放在子线程里。
@会长: 额,addList()这是个主线程,在这个主线程下面添加个子线程,在怎么异步都要等子线程结束完,主线程才会结束吧?能够主线程数据了,子线程还能执行吗?
@会长: 额,addList()这是个主线程,在这个主线程下面添加个子线程,在怎么异步都要等子线程结束完,主线程才会结束吧?能够主线程结束了,子线程还能执行吗?
@隐语者: 试试
@会长: @RequestMapping(value = "create", method = RequestMethod.POST, consumes = "application/xml", produces = "application/xml;charset=UTF-8")
@ResponseBody
public void addList(HttpServletRequest request, HttpServletResponse response, @RequestBody RequestInbound b)
throws Exception {
String aaaa="sdf";
new Thread(new Runnable() {
@Override
public void run() {
try {
System.err.println("The thread is running.....");
Thread.sleep(15000);
System.err.println("The thread was ended.....");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
response.getWriter().write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
return;
}
可以了,先响应了,但是程序还要执行15秒,我知道怎么做了,谢谢。
@隐语者: 赞!给我分点园豆
当然可以,只是这时候的响应表示,我知道了,在做。至于做的结果,不知道。
您好,能具体讲讲怎么操作吗?
以下为简单的例子。
@RequestMapping(value = "create", method = RequestMethod.POST, consumes = "application/xml", produces = "application/xml;charset=UTF-8")
@ResponseBody
public void addList(HttpServletRequest request, HttpServletResponse response){
//《业务代码...》
//发回响应
response.getWriter().write("success");
}
我想要做到的是,我收到别人发送的请求,先进行简单的检查,检查通过之后就发送响应回去,别人能够很快收到这个响应结果,但是我程序会接着处理相对应的业务代码。
RabbitMQ 消息队列,将参数逻辑作为消息体发送到消息队列中,然后让Listener去处理业务逻辑;
通过一个MessageProducer将参数发送到 Message QUEUE 队列中,然后同时配置一个Listener去监听这个 QUEUE队列 , Listener获取到参数后进行业务代码处理。在接口的实现方法就是(1)校验参数;(2)将参数打包发送到消息队列;(3)返回信息给调用者。Listener会自动在后台接收到消息后处理业务逻辑,如果要现成的产品,那就参考一下RabbitMQ:http://www.rabbitmq.com/,这个可以直接引入Spring中,然后做一些相关配置即可用。
你这问题有点矛盾啊业务代码都没执行完,返回的状态码应该是什么