Hy,
В настоящее время я занимаюсь разработкой программы, которая берет 2 значения из очереди amq и выполняет серию математических вычислений над ними.На сервере amq была создана тема, на которую моя программа подписывается и получает сообщения через обратные вызовы (слушатели).
Теперь, когда приходит сообщение, два значения извлекаются и добавляются в объект SynchronizedDescriptiveStatistics.После каждого добавления в список значений вся последовательность вычислений выполняется заново (на самом деле это часть требования).
Проблема, с которой я сталкиваюсь сейчас, заключается в том, что, поскольку я использую слушатели, иногдаодно или несколько сообщений получаются в середине вычислений.Хотя SynchronizedDescriptiveStatistics самостоятельно решает все проблемы, связанные с потоками, но он добавляет все ожидающие значения в свой список номеров сразу, когда он выходит из-под контроля или что-то в этом роде.Хотя моя проблема заключалась в том, чтобы добавить одно значение, затем выполнить вычисления для него, затем второе значение и так далее.
Решение, которое я придумал, заключается в использовании очередей заданий в моей программе (не в очереди amq).Таким образом, всякий раз, когда вызовы завершены, программа будет искать дальнейшие задания в очереди и будет продолжать работать соответственно.
Поскольку я также ищу эффективность и скорость, я подумала, что среда Disruptor может быть полезна для этой проблемы, и этооптимизирован для резьбовых ситуаций.Но я не уверен, стоит ли внедрять Disruptor в мое приложение, потому что для того, что я пытаюсь сделать, может быть достаточно обычной стандартной очереди.
Позвольте мне также сказать, что данные, по которым вычисляютсяПотребность в выполнении - это много, и он будет продолжать поступать, и все расчеты нужно будет выполнять заново для каждого добавления одного значения в непрерывном режиме.Поэтому, учитывая эффективность и огромный объем данных, что, по вашему мнению, будет полезно в долгосрочной перспективе.
Ожидание ответа.,.
С уважением.