Vertx.io Планирование задач - PullRequest
1 голос
/ 07 марта 2019

В компании есть система, в которой я только начал работать. Система позволяет клиентам управлять своими абонентскими уведомлениями через SMS. Пользователи входят в систему через веб-приложение и создают сообщения (каждое сообщение имеет дату отправления, номер телефона получателя и т. Д.). Эти сообщения сохраняются в базе данных MySQL. У них также есть Java-приложение, реализованное с использованием jsvc. Это приложение постоянно читает базу данных 24/7 каждую минуту и ​​отправляет сообщения (через API внешнего сетевого провайдера), то есть для самого сообщения, которое должно быть отправлено в это конкретное время.

Меня привели, чтобы переписать все это. В настоящее время я не могу изменить ничего, что касается веб-приложения и базы данных. Я только пытаюсь переписать jsvc, используя vertx.

Я уже написал службу vertx, которая связывается с БД, и другую службу, которая связывается с внешним API.

Я думал о создании периодической функции, которая запускается каждый час (она считывает базу данных и получает все сообщения, которые должны быть отправлены в течение следующего часа), а затем планирует отправку этих сообщений службе, которая связывается с внешним API.

У меня вопрос, как бы я достиг такого планирования? Дата отправки каждого сообщения с точностью до минуты в базе данных. Я смотрю на Перезвон и на то, как его включить, но я не нашел хорошего примера, который бы помог мне узнать правильный способ сделать это.

Итак, как правильно использовать Chime для планирования сообщений eventbus во внешнюю службу API, и есть ли другой способ структурирования этого варианта использования?

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Посмотрите в таймер Java для планирования или RabbitMQ-клиент.

public void timerSchdule() {
    TimerTask repeatedTask = new TimerTask() {
        public void run() {
            System.out.println("performing activity on " + new Date());
        }
    };
    Timer timer = new Timer("Timer");
    long delay = 1000L;
    long period = 1000L * 60L * 60L * 24L;
    timer.scheduleAtFixedRate(repeatedTask, delay, period);
}
0 голосов
/ 08 марта 2019

Vert.x предоставляет вам setPeriodic() для этого.

Вы можете запускать работу каждый час с чем-то вроде:

vertx.setPeriodic(1000 * 60 * 60, (l) -> {
    // Your code here        
});
...