मेरी परियोजना के एक महत्वपूर्ण हिस्से में जो मूल रूप से वस्तुओं को एसिंक्रोनस रूप से नियंत्रक द्वारा प्राप्त करने की अनुमति देता है, एक Queue में डाल दिया जाता है, एक समय में एक थ्रेड द्वारा कतार से अनुक्रमिक रूप से संसाधित किया जाता है, फिर सेवा प्रतिक्रिया देती है, पुरानी संसाधित वस्तुओं को रखा जाता है नए आइटम प्रविष्टि तक कतार में।

समय से पहले (महीने पहले), इस विशेष व्यवसाय विशिष्ट मुद्दे को हल करने के लिए मेरा Queue कार्यान्वयन अमरूद के EvictingQueue का उपयोग करना था, जिसे अब @Beta के रूप में चिह्नित किया गया है, और इसलिए इसका यह हिस्सा भविष्य अमरूद रिलीज में आवेदन टूट सकता है।

private final Queue<SomeRandomBusinessObject> items = Queues.synchronizedQueue(EvictingQueue.create(queueSize));

क्या इस लक्ष्य को प्राप्त करने के लिए EvictingQueue के कोई थ्रेड-सुरक्षित और निश्चित-आकार विकल्प हैं?

0
gdaly 20 अगस्त 2020, 17:09

1 उत्तर

सबसे बढ़िया उत्तर

आपकी पोस्ट में कुछ अशुद्धियाँ/गलतियाँ हैं, तो चलिए सामान्य आधार खोजने का प्रयास करते हैं।

सबसे पहले, अमरूद में किसी भी नई सुविधा को शुरू से ही @Beta के रूप में एनोटेट किया जाता है, वही EvictingQueue 15.0 में (यह 15.0 डॉक्स से लिंक होता है)। तो आप शायद कुछ महीने पहले उस तथ्य से चूक गए, लेकिन यह ठीक है, क्योंकि...

...@Beta का वास्तव में मतलब यह नहीं है कि इसे बिना किसी सूचना के बदल दिया जाएगा - इसके विपरीत, कुछ समय पहले, समुदाय से कुछ प्रतिक्रिया के बाद, अमरूद के देवों ने इस बारे में बहुत सख्त नीति स्थापित की कि क्या और कब हो सकता है बदला हुआ। देखें PhilosophyExplained wiki page, जो कहता है (जोर मेरा):

बीटा एपीआई

बीटा एपीआई अमरूद की विशेषताओं का प्रतिनिधित्व करते हैं जिन्हें हम किसी भी कारण से फ्रीज करने के लिए तैयार नहीं हैं: क्योंकि विधियों को पर्याप्त उपयोगकर्ता नहीं मिल सकते हैं, क्योंकि उन्हें स्थानांतरित किया जा सकता है, क्योंकि उनका उपयोग अमरूद में शामिल करने के लिए बहुत संकीर्ण हो सकता है।

उस ने कहा, @Beta एपीआई पूरी तरह से परीक्षण और समर्थित हैं, और बाकी अमरूद को प्राप्त होने वाली सभी देखभाल और स्नेह के साथ व्यवहार किया जाता है।

इसका मतलब है कि EvictingQueue गुणवत्ता "बीटा सुविधा" न होने से भी बदतर नहीं है।

@Beta एनोटेशन का सबसे बड़ा अर्थ यह है कि एनोटेट किए गए वर्ग या विधियां परिवर्तन के अधीन हैं। उन्हें किसी भी तरह से संशोधित किया जा सकता है, या हटाया भी जा सकता है, किसी भी समय। यदि आपका कोड स्वयं एक पुस्तकालय है (अर्थात इसका उपयोग आपके अपने नियंत्रण से बाहर के उपयोगकर्ताओं के क्लासस्पैट पर किया जाता है), तो आपको इसका उपयोग नहीं करना चाहिए बीटा एपीआई, जब तक कि आप उन्हें दोबारा पैक नहीं करते (उदाहरण के लिए प्रोगार्ड का उपयोग करना)।

यह वह चिंता हो सकती है जिसे आपने "भविष्य में ब्रेक अप" के बारे में बात करते समय उठाया था, लेकिन ...

यह सब कहा, @Beta सुविधाएं अपेक्षाकृत स्थिर रहती हैं। यदि हम किसी @Beta सुविधा को हटाने का निर्णय लेते हैं, तो हम इसे हटाने से पहले आम तौर पर एक रिलीज के लिए इसे हटा देंगे।

तो यह चुपचाप नहीं होगा (जहां तक ​​​​मैंने देखा, आमतौर पर बहिष्करण के साथ एक से अधिक रिलीज होते हैं)।

जो मुझे आखिरी बिंदु लाता है:

दूसरी ओर, यदि आप @Beta से कुछ निकालना चाहते हैं, तो एक समस्या दर्ज करें। हम आम तौर पर @Beta से सुविधाओं का प्रचार केवल तभी करते हैं जब विशेष रूप से अनुरोध किया जाता है, इसलिए यदि आप मत पूछो, ऐसा नहीं होगा।

संक्षेप में: मेरा सुझाव है कि आप EvictingQueue को बढ़ावा देने के लिए एक टिकट दाखिल करें और इसे गैर-@Beta करें, जो इसके बारे में किसी भी संदेह को दूर करेगा। दूसरी तरफ, EvictingQueue का कार्यान्वयन काफी सरल और स्टैंडअलोन है, इसलिए यदि इसे हटा दिया जाता है (संभावना नहीं है) तो आप इसे दोबारा तैयार कर सकते हैं (यानी प्रोगार्ड का उपयोग करें) या यहां तक ​​​​कि कोड को अपने प्रोजेक्ट में कॉपी करें (सभी लाइसेंस के साथ) .

3
Xaerxess 20 अगस्त 2020, 16:18