Ваша идея использует Queue
для хранения сообщений, потребитель слушает spring events
и потребляет. Я не видел, чтобы ваш код действительно опубликовал sh событие, просто сохраните их в queue
. Если вы хотите использовать Spring Events, производителям может понравиться следующее:
@Autowired
private ApplicationEventPublisher applicationEventPublisher;
public void doStuffAndPublishAnEvent(final String message) {
System.out.println("Publishing custom event. ");
CustomSpringEvent customSpringEvent = new CustomSpringEvent(this, message);
applicationEventPublisher.publishEvent(customSpringEvent);
}
проверьте это do c
Если вы все еще хотите использовать BlockingQueue
, ваш потребитель должен быть запущенным потоком, постоянно ожидающим задач в очереди, например:
public class NumbersConsumer implements Runnable {
private BlockingQueue<Integer> queue;
private final int poisonPill;
public NumbersConsumer(BlockingQueue<Integer> queue, int poisonPill) {
this.queue = queue;
this.poisonPill = poisonPill;
}
public void run() {
try {
while (true) {
Integer number = queue.take(); // always waiting
if (number.equals(poisonPill)) {
return;
}
System.out.println(Thread.currentThread().getName() + " result: " + number);
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
может проверить этот пример кода