【问题标题】:Asynchronous programming in Java - Background processesJava中的异步编程 - 后台进程
【发布时间】:2017-02-21 00:30:55
【问题描述】:

我的 Java Web 应用程序中有一个 REST-API。这有一种方法可以从客户的 Android 应用(客户端)接收订单并(在完成一系列任务后,例如价格计算等)向客户端发送响应。

    @POST
    @Path("order")
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public OrderResponse takeOrder(OrderRequest request
    ) throws IOException {
        OrderResponse response = new OrderResponse();

        String token = request.getTokenString();
        CustomerSession session = sessionPool.getSession(token);

        if (session != null) {

            OrderHeader order = new OrderHeader();
            order.setFkOrderHeaderCustomerID(session.getFkCustomerID());
            order.setOrderCreationDate(new Date());

获取会话以进行身份​​验证等任务必须同步完成,当然。因为客户的反应取决于它的成功或失败......到目前为止一切都很好。

在此方法结束时,客户会收到一个关于其订单请求状态的email

Email email = EmailGenerator.createOrderEmail(order);
            try {
                emailService.send(email);
            } catch (MessagingException ex) {
                Logger.getLogger(CustomerREST.class.getName()).log(Level.SEVERE, null, ex);
            }


            response.setStatus(OrderStatusEnum.SUCCESS);
        } else {
            response.setStatus(OrderStatusEnum.TOKEN_INVALID);
        }

        return response;
    }

这有时需要几秒钟,客户端必须等待响应。好痛。

有什么方法可以发送回复并在后台处理电子邮件吗?

【问题讨论】:

标签: multithreading asynchronous


【解决方案1】:
        Thread mailingThread = new Thread() {
            @Override
            public void run() {
                try {
                    Email email = EmailGenerator.createOrderEmail(order);
                    emailService.send(email);
                } catch (MessagingException | IOException ex) {
                    Logger.getLogger(CustomerREST.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        };
        mailingThread.start();

谢谢凯尔!这似乎做了我尝试的事情!

【讨论】:

  • 没问题!将来(双关语非常有意),您还可以看看futures。当您需要并行运行线程并将结果返回以供程序使用时,它们会很方便。
猜你喜欢
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
  • 2011-01-19
  • 1970-01-01
  • 1970-01-01
  • 2019-10-25
相关资源
最近更新 更多