티스토리 뷰
반응형
구조 파악하기
@EventListener를 사용하는 방법은 다음과 같다.
EventPublisher
@Component
@RequiredArgsConstructor
public class EventPublisher {
private final ApplicationEventPublisher publisher;
public void publish(PublicEvent event) {
publisher.publishEvent(event);
}
}
EventSubscriber
@Component
@RequiredArgsConstructor
public class EventSubscriber {
private final EventService service;
@Async
@EventListener
public void subscribe(PublicEvent event) throws InterruptedException {
service.doing(event);
}
}
SurfaceService
@Slf4j
@Service
@RequiredArgsConstructor
public class SurfaceService {
private final EventPublisher publisher;
public void surface(PublicEvent event) {
log.info("start surface");
publisher.publish(event);
log.info("finish surface");
}
}
호출 시
2022-10-09 20:51:01.160 INFO 14161 --- [nio-8080-exec-1] c.p.s.pubsub.SurfaceService : start surface 2022- 2022-10-09 20:51:01.161 INFO 14161 --- [nio-8080-exec-1] c.p.s.pubsub.SurfaceService : finish surface 2022-10-09 20:51:03.168 INFO 14161 --- [cTaskExecutor-1] c.p.s.pubsub.EventService : eventName = hi
@Async만 써도 되는 데 굳이 왜 Pub Sub을 따로 구성하는 이유가 뭘까?
무엇보다 강한 레이어를 분리하는 것이 가장 큰 목표다.
Subscriber 는 A만 알면 되는데 그 이상의 정보를 넘기는 순간 애플리케이션 레이어 및 로직들이 꼬이게 된다.
그렇기에 Publisher에서 특정 정보만 다듬어서 Subscriber에만 넘김으로서 느슨한 결합을 유지하며 레이어도 유지할 수 있게 된다.
다이어그램을 표현하면 다음과 같다.
다음과 같은 상황이 올 수 있다.
여러 도메인에서 들어오는 요청값이 다양할 수 있다. 하지만 처리에 필요한 것은 특정 값은 하나다.
그런 상황에서 비동기로 처리하기 좋은 방식은 다음 위 다이어그램과 같다.
이렇게 구성하면 느슨한 결합으로 확장성 있는 구조를 작성할 수 있게 된다.
반응형
'JVM > Spring' 카테고리의 다른 글
[Java] record 이해해보기 (0) | 2022.10.06 |
---|---|
[Spring] @Async 비동기로 처리하는 방법 (0) | 2022.10.01 |
[Spring] @Scheduled, @EnableScheduling (0) | 2022.10.01 |
[Spring] Scope (Prototype & Singleton) (2) | 2022.09.13 |
[Hikari CP] 光 살펴보기 - 4 (0) | 2022.04.29 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 자바
- docker
- BFS
- django
- 알고리즘
- env
- docker-compose
- Spring
- ubuntu
- 면접
- 파이썬
- 카카오
- setattr
- headers
- Command Line
- thread
- 2021 KAKAO BLIND RECRUITMENT
- 프로그래머스
- Linux
- postgres
- Collections
- Celery
- 백준
- dockerignore
- PostgreSQL
- Pattern
- Python
- Java
- DRF
- 그래프
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함