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