TLDR: я хочу, чтобы мое приложение Spring Boot запускало некоторый код инициализации при запуске. Код должен иметь доступ к bean-компонентам и значениям Spring.
Я пишу приложение Spring Boot, которое будет одновременно принимать несколько сообщений из очереди. Для этого ему необходимо создать несколько объектов-потребителей. Есть ли у Spring хороший способ создания настраиваемого числа экземпляров одного и того же класса?
Клиент очереди, который я должен использовать, действует как пул потоков. Он создает один поток для каждого потребительского объекта, который я ему даю. Объекты-потребители получают только одно сообщение за раз, и им необходимо полностью обработать и подтвердить сообщение, прежде чем они смогут получить другое. Потребители не являются поточно-ориентированными, поэтому я не могу просто использовать одноэлементный экземпляр.
Я рассмотрел подход ниже, но он не подходит мне. Это выглядит как злоупотребление аннотацией @Component
, потому что экземпляр Initializer
не используется после его создания. Какой лучший способ сделать это?
@Component
public class Initializer {
public Initializer(ConsumerRegistry registry, @Value("${consumerCount}") int consumerCount) {
for (int i = 0; i < consumerCount; i++) {
// Each registered consumer results in a thread that consumes messages.
// Incoming messages will be delivered to any consumer thread that's not busy.
registry.registerConsumer(new Consumer());
}
}
}