공부/JAVA

메시징 시스템을 알아보자 (Active MQ, JMS, 이벤트 기반 아키텍처)

JangGiraffe 2023. 10. 26. 23:06

정의

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 어노테이션을 사용해서 리스너를 둬서 메시지를 받아올 수도 있고, 직접 가져올 수도 있다.

대충 참고용

  1. 프로듀서
    @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);​
  2. 컨슈머
    @JmsListener(destination = "queue")
    public void consumeMessage(String message) {
        logger.info(message);
    }

     

액티브엠큐 커넥션 팩토리 프로세스


메시지 패턴

1. point to point(P2P) 메시지 패턴

  • P2P 메시지 패턴은 큐를 사용해 구현함. 메시지를 보내는 애플리케이션(프로듀서)는 큐에 메시지를 전송하고, 메시지를 수신하는 애플리케이션(컨슈머)는 큐에서 메시지를 가져옴.
  • 메시지는 오직 하나의 컨슈머에 의해 소비된다.
  • 작업처리 및 스케줄링같은 작업에 사용됨

2. PUB-SUB 메시지 패턴

  • PUBLICSH-SUBSCRIBE 메시지 패턴은 토픽(주제)를 사용해 구현함.
  • 이벤트 기반,SNS,뉴스,알림,실시간 데이터 제공 등에 사용

 


이벤트 기반 아키텍처

이벤트란 ?

  • 이벤트는 시스템 상태가 변경(완료)되었다는 신호
     
  • 과거의 정보이며, 이때문에 변하지 않는다.(불변)

 

구독을 이용한 도메인 간 CHOREOGRAPH 패턴

  • 내 서비스의 상태가 변경됐을 때 다른 서비스도 그에 맞춰서 상태를 변경하는데, 동시에 여러 도메인들이 변경되는 구조가 동시에 안무를 하는것과 비슷하다고 해서 코레오그라피 패턴이라고 한데요.

이벤트 기반 아키텍처 예시

장점

  1. 장애에 안전함
    • 서로 다른 도메인간에 종속성이 줄어들기 때문에 다른 서비스에 미치는 영향이 적고, 장애가 복구됐을 때 장애 발생시점의 메시지를 다시 가져와서 처리할 수 있음
  2. 서비스 확장이 유리한 유연한 구조
    • 각 서비스의 스케일 인,아웃 시 영향이 적기 때문에 자유로움

다른 재미있는 글들도 한번 보고 가세요

 

 

# SpringBoot 서버와 AJAX 통신 시 시간이 이상해요⏰

SpringBoot 서버와 AJAX 통신 시 시간이 이상해요⏰ SpringBoot 2.0 이상에서의 직렬화 처리 - timeStamp 단어 뜻 직렬화 데이터 구조나 오브젝트 상태를 동일하거나 다른 컴퓨터 환경에 저장하고 나중에 재

janggiraffe.tistory.com

 

 

코드리뷰를 위한 지침 '코드리뷰 피라미드'

코드리뷰 피라미드 관련글만 보시려면 아래로 쭉 스크롤해주세용 ⭐서론(겸 잡담) 아래 페이지에서 코드 리뷰 피라미드에 대한 글을 보았다. 관련글 : https://www.morling.dev/blog/the-code-review-pyramid/

janggiraffe.tistory.com

 

 

AWS Industry Week 2023 후기

AWS INDUSTRY WEEK 2023 후기 🟦강연 도중 사진을 찍어서 사진들이 파랗습니다.(무음으로 찍음) 미리 죄송합니다 😥 🟦 이번주에 코엑스에서 열린 AWS Industry week에 다녀왔습니다. 다녀온 후 든 생각은

janggiraffe.tistory.com


출처

  • Spring Boot & JMS Active MQ 연동 및 테스트 https://pulpul8282.tistory.com/220
  • AWS INNOVATE (이벤트 기반으로 더 느슨해서 더 유연한 서비스 완성하기)

 

반응형