У меня есть несколько контейнеров сообщений с одним слушателем в каждом.
Каждый слушатель
- Не является потокобезопасным
- Объявлено @Scope (значение = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
- Не является лицом без гражданства. имеет внутренний буфер обработанных сообщений
- Каждое полученное сообщение X сбрасывает буфер на диск.
Запись на этот тип диска очень затратна, и единственный способ достичь желаемой пропускной способности — очищать буфер только через каждые X сообщений.
Каждый слушатель пишет в свои файлы, так что нет необходимости в блокировке.
Я хочу сбросить буферы, когда контейнер Spring выключен.
Каждый слушатель реализует DisposableBean и метод destroy() для очистки буфера.
После некоторых исследований я обнаружил, что, поскольку bean-компоненты объявлены как прототип области видимости, метод destroy никогда не будет вызываться Spring, потому что он перестает управлять bean-компонентом после его создания.
Как я могу очистить оставшиеся сообщения в буфере, когда весна отключается в этой ситуации?
Есть ли в SimpleMessageListenerContainer хук, который я могу использовать для вызова метода уничтожения в моем слушателе?