hara

Spring Boot 2.0 - 9장: 메시징 본문

공부/스프링 부트 2 레시피

Spring Boot 2.0 - 9장: 메시징

하랄라 2020. 9. 16. 19:29

#메시징 시스템이란?

어플리케이션 간에 메시지를 교환하기 위해 사용되는 시스템이다.

어플리케이션이 MSA 구조로 만들어지기 시작하면서, 각각의 어플리케이션간에 통신방법으로 메시징 시스템이 사용된다.

이러한 메시징 시스템에는 크게 2가지의 구조가 존재한다.

 

1. Point to Point 방식

- 보내는 사람이 큐를 통해서 전달할 메시지를 전달하면 받는 사람이 큐에서 메시지를 사용하는 방식

 

2. Pub/Sub 방식

-  이벤트에 대해 구독을 해놓으면 해당 토픽이나 이벤트에 대한 통지를 비동기 방식으로 받는 방식

 

#JMS(Java Message Service) 란?

JMS는 Java Platform, Enterprise Edition의 한 부분이며,

Java Enterprise Edition(JEE) 기반의 애플리캐이션 컴퍼넌트들 간의 메세지를 생성하고, 전송하고, 전송받고, 읽는 기능을 사용할 수 있게 한다.

분산 처리 시스템에서 다른 컴포넌트 간의 느슨한 결합(Loosely coupled)과 신뢰성있으며, 그리고 비동기적으로 통신할 수 있게 해준다.

 

#JMS 설정

- 액티브MQ

  • 가장 대중적이고 강력한 오픈 소스 메세징 그리고 통합 패턴 서버이다.

  • 빠르며, 다양한 언어간의 클라이언트 및 프로토콜을 지원하고, 사용하기 쉬운 엔터프라이즈 통합 패턴 및 많은 고급 기능을 제공하면서 JMS 1.1  J2EE 1.4를 완벽하게 지원한다.

  • MOM(메시지 지향 미들웨어) 이다.

  • JMS를 지원하는 클라이언트를 포함하는 브로커, 자바 뿐만 아니라 다양한 언어를이용하는시스템간의 통신을할수있게해준다또한 클러스터링기능 및 DB 그리고 FileSystem을 통해 각 시스템간의 일관성 및 지속성을 유지 시켜줍니다.

  • 간단히 정의하면  클라이언트 간 메시지를 송수신 할 수 있는 오픈 소스 Broker(JMS 서버) 이다.

  • dependency

<dependency>
	<griupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-activemq</artifactId>
</dependency>

 

- 아르테미스(Artemis)

  • 순차적 실행을 위해 대기열의 작업 또는 메시지 관리 가능하다.

  • 대기열에서 유사한 메시지를 건너 뛸 수 있다.

  • 디스크에 작업 대기열을 유지할 수 있다.

  • dependency

<dependency>
	<griupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-artemis</artifactId>
</dependency>

 

- JNDI(Java Naming and Directory Interface)

  • DB Pool을 미리 Naming 시켜두는 방법이다.

  • Hikaricp를 예로 들 수 있다.

application.yml
---

spring:
  profiles: local
  output:
    ansi:
      enabled: ALWAYS

cuga:
  #Homepage URL
  url:
    admin: http://localhost:9191
    pc-web: http://localhost:9292
    mobile-web: http://localhost:9393
  datasource:
    jndiName: jdbc/cuga
  #File Upload Directory Path
  file-upload:
    temp-dir: C:/attach/temp
    save-dir: C:/attach/save
    file-dir: C:/attach/file

---
DatabaseConfiguration.java

@Bean(name = "defaultDataSource")
public DataSource dataSource() {
  HikariDataSource hikariDataSource = new HikariDataSource();

  hikariDataSource.setJdbcUrl(url);
  hikariDataSource.setDriverClassName(driverClassName);
  hikariDataSource.setUsername(username);
  hikariDataSource.setPassword(password);

  Log4jdbcProxyDataSource logDataSource = new Log4jdbcProxyDataSource(hikariDataSource);

  Log4JdbcCustomFormatter formatter = new Log4JdbcCustomFormatter();
  formatter.setLoggingType(LoggingType.MULTI_LINE);
  logDataSource.setLogFormatter(formatter);
  return logDataSource;
}

 

#JMS를 사용한 메시지 전송

 

#래빗MQ 설정

#래빗MQ를 사용한 메시지 전송

#래빗MQ 사용 메시지 수신

 

#참고

- 책: Spring Boot2 Recipes 9장

- 메시징 시스템 설명: salepark.tistory.com/84

- 액티브MQ 설명: swiftymind.tistory.com/9

- JNDI 설명: badstorage.tistory.com/5

 

 

Comments