10-modul · 5-dars: Event Oriented Programming

Daraja: Ilg'or

Event Oriented Programming. Advanced backend bo‘yicha nazariya, amaliy namuna va mustaqil mashq.

Tushuntirish

## Dars maqsadi Event Oriented Programming tushunchalarini farqlash, nima uchun kerakligini izohlash va kichik misolda qo‘llash.

## Nazariya Event-oriented yondashuvda bir amal sodir bo'lganini event bilan bildiradi, boshqa komponentlar unga javob beradi. Publisher consumer implementationini bilmasligi bog'liqlikni kamaytiradi. Event nomi allaqachon sodir bo'lgan faktni ifodalasin: NoteCreated, buyruq emas. Eventga keraksiz katta entity yoki maxfiy ma'lumot qo'shmang. Spring ApplicationEventPublisher event chiqaradi, @EventListener uni qabul qiladi. Default application event processing odatda bir process ichida sinxron; bu durable message broker emas. @Async qo'shilsa xato qaytarish, executor va context masalalari paydo bo'ladi. @TransactionalEventListener eventni transactionning kerakli fazasiga, masalan AFTER_COMMITga bog'laydi; transaction bo'lmasa default xatti-harakatni biling. Commit va tashqi xabar orasida process o'chishi mumkin. Muhim yetkazish uchun transactional outbox, retry va idempotent consumer kerak. AFTER_COMMIT listener ichida yangi DB yozuvi uchun alohida tranzaksiya talabini baholang. Event order, duplicate, schema evolyutsiyasi va listener xatosi uchun aniq siyosat bo'lmasa yashirin buglar paydo bo'ladi.

## Manbalar [Moduldagi savollar yo‘nalishi](https://github.com/jlkesh/pdp_online_java_lessons/blob/main/interviewquestions/10-module%28Spring%20Boot%20Part%20%7C%7C%29.md) [Rasmiy qo‘llanma](https://docs.spring.io/spring-boot/reference/)

Kod quyida o‘quv namunasi sifatida berilgan. To‘liq ilova uchun import, dependency va konfiguratsiya kerak bo‘lishi mumkin. SQLni faqat ajratilgan test bazasida bajaring.

Kod misoli

record NoteCreated(long id) {}
// Service ichida: publisher.publishEvent(new NoteCreated(noteId));
@org.springframework.transaction.event.TransactionalEventListener(
  phase = org.springframework.transaction.event.TransactionPhase.AFTER_COMMIT)
void onCreated(NoteCreated event) {
  // Muhim tashqi yuborish uchun outboxdan foydalaning.
}

Keng tarqalgan xatolar

Mashqlar

Teglar: pdp, nazariya, modul-10

Interaktiv ko'rinish (viktorina, izohlar, tarix)