Весеннее расписание «Занятость»

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

Проблема в том, что мне нужно программировать занятость. Как известно, "загруженность" на дорогах наблюдается с 17:00 до 18:00 и с 8:00 до 9:00. Я должен моделировать эту занятость, генерируя больше Сообщений в это время, чем в обычное время.

Как я могу это сделать с помощью Spring?

** Для уточнения сообщения необходимо отправлять чаще в часы пик. отметки времени должны быть неизменными в момент их создания. Это сделано для имитации реальной нагрузки на поток (ы).

Ссылки на документацию и / или код действительно полезны,

MessageGenerateMethod

  @Override
  public CameraMessage generate() {
      randomLicensePlate = String.format("%d-%s%s%s-%d%d%d", r.nextInt(9) + 1, rndChar(), 
                                    rndChar(), rndChar(),
      r.nextInt(9) + 1, r.nextInt(9) + 1, r.nextInt(9) + 1);

      return new CameraMessage(randomIdBound, randomLicensePlate.toString(), 
                                                     LocalDateTime.now());
}

Я бы посоветовал вашему весеннему приложению придерживаться обнаружения камеры, а затем настроить модуль взаимодействия / системы / производительности, который может генерировать пики изображений, которые должно обрабатывать ваше весеннее приложение.

emeraldjava 24.09.2018 21:40

Вам нужно вставлять случайные сообщения со случайными отметками времени, с большей вероятностью, чтобы эти отметки времени находились между 17 и 18 часами вечера? Или вы хотите регулярно отправлять сообщения в течение дня, а в рабочие периоды отправлять их больше? Кстати, это пишется бизнес.

Saucistophe 24.09.2018 21:43

если вы решите, что лучше придерживаться весны, взгляните на запланированные задачи и запустите задачу в течение времени, которое генерирует запросы на обработку

Robert H 24.09.2018 21:43

@Saucistophe Busyness = состояние занятости многими делами

nuckle 24.09.2018 22:28

@Saucistophe - последнее, куда отправляется больше сообщений в часы пик.

nuckle 24.09.2018 22:30

Спасибо за ваше объяснение! Думаю, мы учим новые слова каждый день :)

Saucistophe 24.09.2018 22:37
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
6
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Сделайте int под названием frequency. Частота должна быть выше в часы пик и ниже в часы непиковой нагрузки. Каждую минуту (по системным часам) перекалибруйте свою частоту с помощью алгебраической функции - просто элементарной математической функции f (t).

Используйте Spring Scheduling (фиксированная частота = K), чтобы запланировать каскадное событие сообщения каждую минуту, которое отправляет сообщения frequency, а затем повторно калибрует повторение freqency = f(now())..

Каскадная функция, вероятно, не имеет смысла снимать все сообщения n сразу - может быть, распределить их равномерно или случайным образом

например f(t) = Math.abs(secondsInDay(t) - secondsInDay(PEAK_TIME)), где secondsInDay - это метод, который принимает Instantt и возвращает количество секунд в дне с полуночи для t.

Blake 24.09.2018 21:54

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

nuckle 24.09.2018 22:26

Пример функции, которую я написал, будет просто: int getFrequency(Instant t){ return Math.abs(secondsInDay(t) - secondsInDay(PEAK_TIME)); }. Дело в том, что вы просите «создать бизнес», а способов сделать это бесконечно много. Я даю вам набросок одного из возможных способов.

Blake 25.09.2018 13:49

Вы можете запустить отдельный нить, который отправляет сообщения, и, например, заставить его ждать n секунд между сообщениями; n будет варьироваться от вашего нижнего предела, например 60, если вы хотите моделировать машину каждую минуту, до вашего верхнего предела; может быть 3, если вы хотите моделировать 20 автомобилей в минуту. Вы также можете настроить время ожидания случайным образом.

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

Другие вопросы по теме