Java: очередь с задержкой по времени, которая устраняет дублирование

Всем привет,

У меня есть система (источник), которая должна асинхронно уведомлять другую систему (цель) при изменении определенных объектов. Хитрость заключается в том, что исходная система может изменять один объект много раз за короткий интервал (обновления очень "скачкообразные"), и в этом случае было бы идеально уведомить целевую систему только один раз, и с конечным состоянием объекта.

Моя мысль заключалась в том, чтобы использовать для этого какую-то отложенную по времени очередь дедупликации перед ThreadPoolExecutor. Эта очередь:

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

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

Я не видел ничего подобного в java.util, и мой google-fu в этой области кажется особенно слабым.

Кто-нибудь реализовывал это раньше, знает реализацию BlockingQueue, которая ведет себя таким образом, или есть советы, как я могу ее реализовать?

Заранее спасибо!

Питер

PS. Я знаю, что ESB делают такие вещи, но в данном случае это слишком тяжелый подход - в идеале я вообще не хочу добавлять какие-либо новые библиотечные зависимости в исходную систему.

6
задан Peter 29 May 2011 в 06:08
поделиться