Message전송할 데이터가 담긴 Wrapper Class로 comsumer가 메시지 요청 시 provider는 instance화 된 Message를 생성한다.
Header : 메시지의 메타데이터 ex) id, expriedDate 등
Payload : 전송하고자 하는 실제 데이터 ex) Serialized Date 등
Pipe (Message Channel) : 어댑터 개념으로 비즈니스 로직과 엔드포인트 사이에서 송수신을 하기위한 창구
Point to Point Channel : 1:1 전송용도의 Channel
Publish/Subscribe Channe : 1:N 전송용도의 Channel
Filter (Message Endpoint): Message 오브젝트를 발신/수신하는 목적지
참고:
https://eat-hokey.tistory.com/30
메세지 기반이 언급되는 도구들에 대해서 조사하다가 발견한 글의 일부이다.
Message
모든 시스템은 결국 데이터를 전달하기 위한 짜임이다. 그리고 데이터의 구조를 잘 나누어보면, 실질적인 value 데이터와 메타데이터로 나누어져 있다. 이런 틀을 추상화 시킨 껍데기가 Message이다.
public interface Message<T> { T getPayload(); MessageHeaders getHeaders(); }
얘를 왜 써야 하는 고민이 있는데... 아시다시피 자바는 타입 기반의 언어이다. 타입이 변경될때마다 인터페이스가 바뀌면 개발자는 짜증을 낼 수밖에 없다. 그런데 메시지로 인터페이스를 통일시켜 데이터를 전달한다면? 매번 관련 인터페이스를 수정해야 할 필요가 없는 것이다!
보면 2개의 정보를 리턴하고 있는데, Payload는 T로 지정이 되어 있어 어떤 형태의 데이터라도 저장이 가능하다. 그렇다면 Header는 무엇인가? 맞다. 예상하시는 데로 메타 데이터이다.
웹소켓은 양방향 데이터 통신을 구현하는데 Pub, Sub 구조를 단순한 사용한 것이지만
스프링 인티그레이션, RabbitMQ는 자바 객체단으로 내려가서 프로젝트의 아키텍팅에 까지 영향을 주고 있는 것으로 보인다.
http://blog.naver.com/PostView.nhn?blogId=fltltmxjs&logNo=220008414333
'Spring' 카테고리의 다른 글
Spring RestTemplate는 기본적으로만 사용하면 커넥션 풀 지원안함 (0) | 2020.08.07 |
---|---|
스프링 @Controller의 실행흐름 (0) | 2020.02.16 |
댓글