G'day herkesi de-dupes bir zaman gecikmeli kuyruğuJava:
Ben bir sistem (kaynak) olan belirli nesneler değiştirmek uyumsuz zaman başka sistem (hedef) bildirmek gerekiyor. Büküm, kaynak sistemin kısa bir aralıkta birçok kez tek bir nesneyi mutasyona uğrattığıdır (güncellemeler çok "burst" dır) ve bu durumda hedef sistemi sadece bir kez bildirmek ve son halini vermek için ideal olacaktır. nesne.
Düşüncem, bunun için bir ThreadPoolExecutor öğesinin önünde bir tür zaman gecikmeli, de-duping kuyruğu kullanmaktı. Bu kuyruk olurdu:
bir zaman minimum tutar için sıraya öğeleri tutmak varolan nesneyi değiştirmek
(ideal mutasyonların tipik patlaması süresinden uzun sadece azlclk olacak şekilde yapılandırılmış) Bir kopyanın (nesnenin tanımlayıcısı tarafından tanımlandığı gibi) kaydedilmesi durumunda. Bununla birlikte, eşya, kuyruktaki orijinal yerini muhafaza etmelidir (herhangi bir parçanın sürekli olarak sıranın arkasına çarpmasını önlemek için), bir noktada, başka bir noktadan anlık olarak gelecek olsa bile, bildirimi göndermemiz gerekir.
Tam olarak java.util'de böyle bir şey görmedim ve bu alandaki google-fu'm özellikle zayıf görünüyor.
Bunu daha önce uygulamış bir kişi var mı, bu şekilde davranan bir BlockingQueue uygulamasını mı biliyorsunuz, yoksa bir uygulamayla ilgili nasıl gidebileceğime dair ipuçlarınız var mı?
Şimdiden teşekkürler!
Peter
PSPS. ESB'lerin böyle bir şey yaptıklarını biliyorum, ancak bu durum çok ağır bir yaklaşım. Bu durumda, ideal olarak kaynak sisteme yeni kütüphane bağımlılıkları eklemek istemiyorum.
Doğruluk teşekkürler. Sadece 'BlockingQueue' uygulamasının doğrudan uygulanması, ancak 'teklif' ve 'anket' yöntemlerinde ekstra bir mantıkla bir dahili 'ArrayBlockingQueue' örneğine delege edilmesiyle ilgili herhangi bir düşünce var mı? Her zaman temel JDK sınıflarını genişletme konusunda biraz tereddüt ediyorum - bunların çoğu gerçekten akılda tutularak tasarlanmamıştı (özellikle java.util.concurrent, içinde bulunduğum sınırlı aramalardan). – Peter
Eh uzanan ve bu durumda + iç uygulanması arasındaki fark kuyruk nesnesi olarak 'myBlockingQueue'' kullanarak this'/'super' arasındaki fark olacaktır, bu nedenle IMO tat meselesi. – trutheality
Şimdi düşünüyorum da, 'DelayQueue' fikri daha kolay olabilir. Ben zorlu kısmı onlar bir 'ArrayBlockingQueue' kullanırsanız, muhtemelen' iterator' ile de gireceğim ya 'bir gibi bir şey tutarak ya yer alacağı, kuyruğa yaparken sıranın elemanlarını güncellenmesi olacak düşünüyorum nesnelere kolay erişim için referansların ArrayList'. Ile 'sadece' Çıkar', maç sona erme zamanı ve 'offer' var DelayQueue'. – trutheality