정의
1. 메시징 시스템
- 분산 컴퓨팅 환경에서 애플리케이션간의 효율적인 통신을 지원하는 시스템으로 이벤트 기반 아키텍처에서 사용됨
- 특징 :
비동기 통신
/확장성
/신뢰성
2. 메시지 브로커
- 메시징 시스템의 핵심 구성요소로 어플리케이션간의 메시지를 교환하도록 도와주는 중간 소프트웨어나 서버
- 특징 : 메시지 라우팅 / 메시지 큐잉 / 토픽 / 메시지 변환, 프로토컬 어댑터
3. JMS
- Java Messaging System의 약자로, Java에서 Messaging System을 사용하기 위한 API들의 모음
- JMS의 메시지는
메시지헤더
/프로퍼티
/몸체(텍스트,오프젝트 포멧지원)
세가지로 구성된다.- 메시지 헤더 : 메시지를 구분하기 위해 사용됨. 구독자 체크등이 있다.
- 프로퍼티 : 어플리케이션
- 몸체 : 메시지의 내용을 저장하는 부분, textMessage(텍스트),ObjectMessage(모든 직렬화 가능한 객체 + 다중객체라면 콜렉션객체도 사용 가능)같은 포멧을 지원한다.
4. 액티브 MQ
- 아파치사의 오픈소스 메시지 브로커 소프트웨어
- JAVA로 구현됐고,
JMS
(java message service)를 지원해서 JAVA 어플리케이션과 다른 언어로 개발된 어플리케이션간의 통신을 지원함. producer
가 메시지를 Queue/Topic에 넣어두면,Consumer
가 메시지를 가져가는 방식으로,컨슈머
는@JmsListener
어노테이션을 사용해서 리스너를 둬서 메시지를 받아올 수도 있고, 직접 가져올 수도 있다.
대충 참고용
- 프로듀서
@Bean public Queue queue() { return new ActiveMQQueue("queue"); } @Bean public ActiveMQConnectionFactory activeMQConnectionFactory() { ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(); activeMQConnectionFactory.setBrokerURL(brokerUrl); return activeMQConnectionFactory; } @Bean public JmsTemplate jmsTemplate() { return new JmsTemplate(activeMQConnectionFactory()); } ////////////// import org.springframework.jms.core.JmsTemplate; @Autowired private JmsTemplate jmsTemplate; ObjectMapper mapper = new ObjectMapper(); String studentAsJson = mapper.writeValueAsString(student); jmsTemplate.convertAndSend(queue, studentAsJson);
- 컨슈머
@JmsListener(destination = "queue") public void consumeMessage(String message) { logger.info(message); }
메시지 패턴
1. point to point(P2P) 메시지 패턴
- P2P 메시지 패턴은 큐를 사용해 구현함. 메시지를 보내는 애플리케이션(프로듀서)는 큐에 메시지를 전송하고, 메시지를 수신하는 애플리케이션(컨슈머)는 큐에서 메시지를 가져옴.
- 메시지는 오직 하나의 컨슈머에 의해 소비된다.
- 작업처리 및 스케줄링같은 작업에 사용됨
2. PUB-SUB 메시지 패턴
- PUBLICSH-SUBSCRIBE 메시지 패턴은 토픽(주제)를 사용해 구현함.
- 이벤트 기반,SNS,뉴스,알림,실시간 데이터 제공 등에 사용
이벤트 기반 아키텍처
이벤트란 ?
- 이벤트는 시스템 상태가 변경(완료)되었다는 신호
- 과거의 정보이며, 이때문에 변하지 않는다.(불변)
구독을 이용한 도메인 간 CHOREOGRAPH 패턴
- 내 서비스의 상태가 변경됐을 때 다른 서비스도 그에 맞춰서 상태를 변경하는데, 동시에 여러 도메인들이 변경되는 구조가 동시에 안무를 하는것과 비슷하다고 해서 코레오그라피 패턴이라고 한데요.
이벤트 기반 아키텍처 예시
장점
- 장애에 안전함
- 서로 다른 도메인간에 종속성이 줄어들기 때문에 다른 서비스에 미치는 영향이 적고, 장애가 복구됐을 때 장애 발생시점의 메시지를 다시 가져와서 처리할 수 있음
- 서비스 확장이 유리한 유연한 구조
- 각 서비스의 스케일 인,아웃 시 영향이 적기 때문에 자유로움
다른 재미있는 글들도 한번 보고 가세요
출처
- Spring Boot & JMS Active MQ 연동 및 테스트 https://pulpul8282.tistory.com/220
- AWS INNOVATE (이벤트 기반으로 더 느슨해서 더 유연한 서비스 완성하기)
반응형