كيفية اغلاق برشاقة أسفل الربيع JMS MessageListenerAdapter
سؤال
ولدي معالج الرسالة، التي تستهلك من قائمة انتظار الدائرة والتي ترسل النتائج إلى قائمة الانتظار JMS آخر. يعيش معالج الرسالة في DefaultMessageListenerContainer الربيع. عندما تغلق الحاوية إلى أسفل، وأود لذلك لإنهاء التعامل مع أي طلبات أنها استهلكت بالفعل، وترسل النتائج. وفي الوقت نفسه، ينبغي أن لم تعد تستهلك أي رسائل جديدة من قائمة الانتظار الطلب.
والآن، مع عدم وجود أحكام خاصة اغلاق آمنة ApplicationContext.registerShutdownHook ()، وينتظر حاوية لأي بانتظار الدعاء listernerMethod للعودة، لكنها ليست بإرسال النتائج إلى قائمة انتظار الرد.
وماذا سيكون النهج المناسب للتأكد من أن الردود التي تنتجها معالجات تشغيل وترسل إلى قائمة انتظار الرد؟
المحلول
وأعتقد أن الطريق للذهاب له لقيادة عن طريق واجهة DisposableBean
أو الشرح @PreDestroy
. الشيء IMHO الرئيسي هو عدم السماح الربيع اغلاق DMLC بل ترك هذا الذي يقوم به العنصر الذي هو على بينة من الرسائل حاليا "داخل النظام". وبهذه الطريقة يمكنك التوقف عن الاستماع لرسائل جديدة في انتظار رسائل نتم حاليا ليتم الانتهاء.
depends-on
على الإعلانات الفول يمكنك أيضا تحديد ترتيب الفاصوليا أن يغلق. الأحمر أكثر عن هذا في الربيع المرجعية وثائق .