Skip to content

Conversation

@Kama-Pushka
Copy link
Owner

@Kama-Pushka Kama-Pushka commented Apr 28, 2025

Студент: Аптуликсанов Руслан Германович
Преподаватель: Никита Иванов

  • Создать три EventListener’a (обычный, Async и Transactional) (handleOrderCreatedEvent - обычный, handleOrderCreatingEvent - async, классы PaymentProcessedEventListener и PaymentEventListener - содержат TransactionalEventListener)
  • Для каждого из них порождать событие
  • Для TransactionalEventListener порождать два события так, чтобы одно обрабатывалось, а другое нет (не совсем понял формулировку, поэтому сделал это в PaymentProcessedEventListener и PaymentEventListener с помощью фаз AFTER_COMMIT и AFTER_ROLLBACK)
  • Логировать моменты порождения и обработки событий

В этом задании я попытался реализовать связь двух условных микросервисов OrderService и PaymentService через события и обработчики (в каждом сервисе стоят обработчики на события другого сервиса) (поэтому листенеров чуть больше, чем в условии).

добавил логирование, ивент и обычный листенер к нему
Copy link

@nemoguigrat nemoguigrat left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Вообще выглядит интересно, но ничего не работает. Из за отсутствия транзакции дальше события не прокидываются и не обрабатываются

public void handlePaymentSuccessEvent(PaymentProcessedEvent event) {
log.info("Handle PaymentProcessedEvent (AFTER_COMMIT)...");
log.info("Publish OrderCreatedEvent.");
eventPublisher.publishEvent(new OrderCreatedEvent());

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

не обязательно публиковать. Можно сделать return этого события. Спринг сам его опубликует

public class PaymentService {
private final ApplicationEventPublisher eventPublisher;

@Transactional(value = REQUIRES_NEW, rollbackOn = Exception.class)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я пробовал запускать проект и транзакция здесь не открывается даже с этими параметрами. Попробуй пересмотреть логику

@Log4j2
@Component
@RequiredArgsConstructor
public class PaymentEventListener {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Точно такой же перехватчик находится в пакете org.javaspringcourse.order.eventListener. Зачем это нужно?

@@ -0,0 +1,27 @@
package org.javaspringcourse.payment.eventListener;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

пакеты в java лучше называть либо одним словом, либо без разделителей. eventlistener

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants