Всем привет,
У меня есть система (источник), которая должна асинхронно уведомлять другую систему (цель) при изменении определенных объектов. Хитрость заключается в том, что исходная система может изменять один объект много раз за короткий интервал (обновления очень "скачкообразные"), и в этом случае было бы идеально уведомить целевую систему только один раз, и с конечным состоянием объекта.
Моя мысль заключалась в том, чтобы использовать для этого какую-то отложенную по времени очередь дедупликации перед ThreadPoolExecutor. Эта очередь:
сохранит элементы в очереди в течение минимального периода времени (в идеале сконфигурирована так, чтобы быть всего лишь немного дольше, чем продолжительность типичного всплеска мутаций)
заменять существующий объект в случае, если дубликат (как определено идентификатором объекта) ставится в очередь. Тем не менее, элемент должен сохранить свое исходное место в очереди (чтобы избежать того, чтобы какой-либо один элемент постоянно попадал в конец очереди - в какой-то момент нам нужно просто отправить уведомление, даже если на мгновение появится другой).
Я не видел ничего подобного в java.util, и мой google-fu в этой области кажется особенно слабым.
Кто-нибудь реализовывал это раньше, знает реализацию BlockingQueue, которая ведет себя таким образом, или есть советы, как я могу ее реализовать?
Заранее спасибо!
Питер
PS. Я знаю, что ESB делают такие вещи, но в данном случае это слишком тяжелый подход - в идеале я вообще не хочу добавлять какие-либо новые библиотечные зависимости в исходную систему.