我在这里遇到设计问题。我有一个用 jersey 实现的 RESTful Web 服务.我也在用 spring mail 发邮件。
我的规范需要通知特定的用户组(大约 15-20 人)已发出 PUT 请求并通知他们资源的修改。此外,我需要向发出请求的客户端发送一个 JSON 数组作为响应。
现在我所做的是在修改我处理 PUT 服务的方法之后,我向用户发送电子邮件,然后返回 JSON 状态。
但是为什么客户端要等待邮件通知完成呢?如果我的用户列表很长,客户端等待很长时间才能得到响应怎么办?这不是他的头痛。但我也需要在 PUT 方法中通知用户。如果我返回 JSON,我将失去通过请求响应周期发送通知的上下文。
有更好的方法吗?
为了有一个想法,我提供了我的代码的相关部分:
//first notify users
notifyUsers(event,jsonEntity,NotificationType.TicketType.UPDATED);
//then return response
return new JSONObject()
.put("response_code:", Response.status(Status.OK).build())
.put("title", evento.getDescrizioneevento())
.put("status", getEventAsString(evento.getStatoevento()))
.put("solved", evento.getCausascatenante());
最佳答案
使“notifyUsers”异步。
排队请求,稍后处理。您可以在单例中使用一个简单的 BlockingQueue,并使用一个线程监听另一端,或者您可以设置一个更正式的排队系统,例如 JMS。您还可以将请求插入到数据库中,并在其中监听 Activity 。
或者您可以直接在此处启动一个简单的线程,并让它在您从请求返回时运行。这也可以。
各种不同优缺点的选择。
关于java - 调用 Jersey 服务 (PUT) 时发送电子邮件通知的设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6836304/