REST сервис и запланированная отправка сообщений - PullRequest
0 голосов
/ 25 ноября 2018

Я работаю над клиент-серверным приложением, использующим Джерси в качестве реализации JAX-RS.Я использую приведенный ниже код для обработки пользовательских запросов.

@Path("service")
public class SomeRestService {

    @POST
    @Path("good")
    @Consumes(MediaType.APPLICATION_XML)
    @Produces(MediaType.APPLICATION_XML)
    public Resp getCardRequest(Req request) {
        String result = "Request has been received: " + request;
        Response.status(201).entity(result).build();

                // Here it becomes clear that the service will have to send an email to someone@mail.com with some content on 17.01.2019 at 14:00 for example
                ...

             Resp response = ...

       return response;
    }

Насколько я знаю, каждый пользовательский запрос вызывает создание потока на стороне сервера.После того, как ответ был возвращен, поток завершается.Поэтому, если мне нужно отправить электронное письмо клиенту через месяц или в определенную дату и время, я должен каким-то образом запланировать его.Я думал о том, чтобы сохранить необходимую информацию в базе данных и запустить такие утилиты Unix, как cron или at, чтобы запрашивать соответствующие таблицы и отправлять электронные письма, если это необходимо.Не уверен, что это лучший способ сделать такую ​​задачу.Как это обычно делается?Мне сказали, что в будущем могут появиться другие каналы уведомлений, такие как sms, whatsapp, viber и т. Д.

1 Ответ

0 голосов
/ 25 ноября 2018

Одна из опций, которую я использовал в прошлом, была Quartz Framework.

Я бы прочитал CronTrigger Tutorial .

Например, вы определяете JOB:

public class SimpleJob implements Job {
    public void execute(JobExecutionContext arg0) throws JobExecutionException {
        // send email code
    }
}

И вы пишете код для запускаэто каждую пятницу в полдень или каждый будний день в 9:30 утра:

CronTrigger trigger = TriggerBuilder.newTrigger()
  .withIdentity("trigger3", "group1")
  .withSchedule(CronScheduleBuilder.cronSchedule("0 0/2 8-17 * * ?"))
  .forJob("myJob", "group1")
  .build();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...