반응형
현재는 다른 좋은 방법들이 많아서 잘 사용되지 않지만 개념에 대해서 알고 가고자 포스팅을 남긴다.
기존에 아래 사진과 같은 비지니스가 있다고 하면
하나의 비지니스가 너무 길고 간단하게 봐야 이정도지 서로 물리고 엮여있는게 많다면 그 비지니스 하나는 엄청나게 커지고
유지보수 측면에서도 어렵고 복잡할 것이다.
그래서 요즘엔 MSA 로도 많이 나오지만 비지니스 관점에서 보면 아래 그림과 같이 바뀌고 있다.
event 발생 여부에 따라 어떤 메서드를 동작 시킬지에 대해 이런 방식으로 흘러간다.
요즘엔 AOP로 설정을 해두거나 Kafka, MQ 등으로 설정을 하곤 한다.(참고 포스팅 참고)
그럼 자바에서는 이 이벤트를 구현하기 위해서는
- ApplicationEventPublisher
- @EventListener
이 두가지를 사용한다.
예시 코드는 아래와 같다.
private final ApplicationEventPublisher applicationEventPublisher; public void eventlistener() { applicationEventPublisher.publishEvent("hello"); TestDto d = new TestDto(); d.setDataId("IDID"); applicationEventPublisher.publishEvent(d); applicationEventPublisher.publishEvent(10L); } |
일단 ApplicationEventPublisher 를 bean 주입 받고 publishEvent메서드를 호출한다.
그리고 Handler 쪽은 오버로딩 해서 여러 메서드를 만들어둘수 있다.
아래와같이 만들어준다.
@Component public class MyEventHandler { @EventListener @Async public void firstEventListener(String event) { String id = event; System.out.println("11111"); System.out.println(id); } @EventListener @Async public void ㄴecondEventListener(TestDto dto) { String id = event.getId(); System.out.println("22222"); System.out.println(id); } @EventListener @Async public void thirdEventListener(Long event) { Long id = event; System.out.println("33333"); System.out.println(id); } } |
@Component 를 통해서 bean 으로 역시 등록하였고,
이렇게 되면 publishEvent 에서 인자 타입에 따라 각각에 맞는 event 가 동작을 하게 된다.
참고 포스팅
https://thenicesj.tistory.com/259
반응형
'IT > Java' 카테고리의 다른 글
@Transactional 사용시 주의 사항4 (propagation(전파속성) 에 대해) (45) | 2023.11.14 |
---|---|
@TransactionalEventListener 란? (37) | 2023.11.13 |
equals 함수 (equalsIgnoreCase) (42) | 2023.11.09 |
if/else 동작 방식 (45) | 2023.11.08 |
[error] Method has too many Body parameters (multiple RequestBody) (37) | 2023.11.07 |
댓글