Uživatel klikne na „Generovat report”. Synchronní zpracování trvá 30 sekund. Řešení? Přesuňte těžkou práci do pozadí. RabbitMQ je náš nástroj pro asynchronní zpracování a decoupling služeb.
Proč RabbitMQ¶
AMQP standard, bohatý management UI, výborná Java podpora přes Spring AMQP. Producent pošle zprávu, konzument ji zpracuje. Lepší UX, škálovatelnost, odolnost.
Exchanges, queues, bindings¶
@Bean
public Queue reportQueue() {
return new Queue("reports.generate", true);
}
@RabbitListener(queues = "reports.generate")
public void handleReport(ReportRequest request) {
byte[] pdf = reportService.generate(request);
emailService.sendReport(request.getUserEmail(), pdf);
}
Error handling a dead letter queue¶
Tři pokusy s exponenciálním backoff, pak přesun do DLQ. Monitoring DLQ součástí alertingu. Management Plugin na portu 15672 pro přehled front a throughput.
Messaging je architekturní vzor¶
Místo synchronních volání přemýšlíte v událostech a frontách. Výsledek: odolnější, škálovatelnější systém.