An open API service indexing awesome lists of open source software.

https://github.com/dhslrl321/zsmq

๐Ÿ“จ Zola (Extremely) Simple Message Queue for spring, It is the simplest Message Queue you've ever experienced.
https://github.com/dhslrl321/zsmq

docker message-queue message-queue-server messaging

Last synced: about 2 months ago
JSON representation

๐Ÿ“จ Zola (Extremely) Simple Message Queue for spring, It is the simplest Message Queue you've ever experienced.

Awesome Lists containing this project

README

          

### ๋‹น์‹ ์ด ๊ฒฝํ—˜ํ•œ Message Queue ์ค‘์— ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ Message Queue

#### [home (engish version)](https://github.com/dhslrl321/zsmq)

#### [korean version docs](https://github.com/dhslrl321/zsmq/blob/main/README-kor.md)

๐Ÿ“—Getting Started || Overview || Docs || Change Log

# ZSMQ

ZSMQ ๋Š” java ๋กœ ๊ฐœ๋ฐœ๋œ **์กธ๋ผ ๊ฐ„๋‹จํ•œ ๋ฉ”์‹œ์ง€ ํ, Zola Simple Message Queue** ์ž…๋‹ˆ๋‹ค.

> 'zola' is a korean slang. It means 'utterly', 'extremely', 'super', 'very'

ZSMQ ๋Š” ์šด์˜ ํ™˜๊ฒฝ์ด ์•„๋‹Œ ๋‹ค์–‘ํ•œ ๊ณณ (PoC ํ˜น์€ ํŠน์ • ๋ถ„์•ผ์˜ ํ•™์Šต) ์—์„œ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ฑ๋Šฅ์€ ์ค‘์š”ํ•˜์ง€ ์•Š์ง€๋งŒ ์•„์ฃผ ๊ฐ„๋‹จํ•œ ๋ฉ”์‹œ์ง€ ํ๊ฐ€ ํ•„์š”ํ•  ๋•Œ zsmq ๋Š” ์ตœ๊ณ ์˜ ์„ ํƒ์ž…๋‹ˆ๋‹ค.

### ZSMQ ์˜ ๋ชฉํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

- **๋‹จ์ˆœํ•จ**
- **์‰ฌ์›€**
- **์ง๊ด€์ ์ธ ์„ค์ • ๋ฐ ์‚ฌ์šฉ**
- **๋‹น์‹ ์ด message queue ์ด์™ธ์— ๊ฒƒ๋“ค์— ์ง‘์ค‘ํ•˜๋Š” ๊ฒƒ์„**

# Quick Start

ZSMQ ๋Š” ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ์Šคํ…œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์†Œํ•œ์˜ ์„ค์ •์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

> ์ž์„ธํ•œ ์„ค์ •๋“ค์„ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด [example](https://github.com/dhslrl321/zsmq-example) ์„ ํ™•์ธํ•˜์„ธ์š”. zsmq ๋ฅผ ์ด์šฉํ•œ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜์˜ 4๊ฐ€์ง€ ๋‹จ๊ณ„๋งŒ ๊ฑฐ์น˜๋ฉด ์‰ฝ๊ฒŒ ๋ฉ”์‹œ์ง€ ํ ์„œ๋ฒ„ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1. messaging server ์™€ dashboard ์‹คํ–‰
2. gradle ์˜์กด์„ฑ ์ถ”๊ฐ€
3. configure property
4. ๊ฑ ์“ฐ์„ธ์š”!

## 1. messaging server ์™€ dashboard ์‹คํ–‰

zsmq ๋Š” ๋‘๊ฐ€์ง€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜์˜ ๋‘๊ฐ€์ง€ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ชจ๋‘ ์‹คํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

1. ๋ฉ”์‹œ์ง• ์„œ๋ฒ„
2. ์„œ๋ฒ„ ๋Œ€์‹œ๋ณด๋“œ

> ์ž์„ธํ•œ ์‚ฌํ•ญ์€ [wiki ์˜ zsmq ์˜ architecture](https://github.com/dhslrl321/zsmq/wiki/ZSMQ's-Architecture) ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฉ”์‹œ์ง€ ์„œ๋ฒ„๋Š” message queue ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. message ๋ฅผ publish ํ•˜๊ณ  subscribe ํ•˜๋Š” ๋Œ€์ƒ์ด messaging server ์ž…๋‹ˆ๋‹ค.

dashboard ๋Š” messaging server ์— ๋Œ€ํ•œ view ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€ ํ๋ฅผ ํ™•์ธํ•˜๊ณ  ๋ฉ”์‹œ์ง€ ํ๋ฅผ ์ƒ์„ฑ/์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

```shell
docker run --rm -d -p 8290:3000 dhslrl321/zsmq:dashboard.1.0.1
docker run --rm -d -p 8291:8291 dhslrl321/zsmq:server.1.0.0
```

> ๋งŒ์•ฝ ํฌํŠธ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ์ผ์ด ์ƒ๊ธด๋‹ค๋ฉด issue ์— ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”

## 2. gradle ์˜์กด์„ฑ ์ถ”๊ฐ€

zsmq ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 2๊ฐ€์ง€ ์˜์กด์„ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

1. zola-messaging-core
2. zola-messaging-spring-sdk

spring ์—์„œ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์œ„์˜ ์˜์กด์„ฑ๋“ค์„ ์ง์ ‘ ์ถ”๊ฐ€ํ•˜์—ฌ bean ์œผ๋กœ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

#### ํ•˜์ง€๋งŒ ZSMQ ๋Š” ์œ„์™€ ๊ฐ™์€ ๋ณต์žกํ•œ ์„ค์ • ๊ณผ์ •์„ ์ƒ๋žตํ•˜๊ณ  ์‰ฝ๊ฒŒ ์„ธํŒ…ํ•  ์ˆ˜ ์žˆ๋„๋ก spring-boot-starter ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์˜์กด์„ฑ์€ [jitpack](https://jitpack.io/#dhslrl321/zsmq) repository ์—์„œ ๋‹ค์šด๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ธ”๋ก์„ `build.gradle` ์— ์ถ”๊ฐ€ํ•˜์„ธ์š”.

```groovy
repositories {
// ... other maven repository
maven { url 'https://jitpack.io' }
}

dependencies {
implementation 'com.github.dhslrl321.zsmq:zola-messaging-sprint-boot-starter:1.0.0'
}
```

์ˆ˜๋™์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํฌํ•จํ•˜์—ฌ ๋”์šฑ ๋งŽ์€ ์ •๋ณด๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด์„œ๋Š” [reference guide](https://github.com/dhslrl321/zsmq/wiki/Reference-Guide) ์„ ํ™•์ธํ•˜์„ธ์š”.

## 3. configure property

๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฉ”์‹œ์ง• ์„œ๋ฒ„์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ `application.property` ํ˜น์€ `application.yml` ์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

```yaml
zsmq:
url: http://localhost:8291
listening: false
```

- `zsmq.url` : ๋ฉ”์‹œ์ง€ ํ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฉ”์‹œ์ง• ์„œ๋ฒ„ ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค.
- `zsmq.listening` : ๋ฆฌ์Šค๋‹ ์Šค๋ ˆ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ๋“ฑ๋กํ• ์ง€ ๋ง์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค
- ๋ฆฌ์Šค๋„ˆ ์Šค๋ ˆ๋“œ๋Š” consuming ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

## 4. ๊ฑ ์“ฐ์„ธ์š”!

์ด์ œ ๋ชจ๋“  ์„ค์ •์€ ๋๋‚ฌ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ƒฅ ์‚ฌ์šฉํ•˜์„ธ์š”!

#### 1. dashboard ์— ๋“ค์–ด๊ฐ€์„œ ํ๋ฅผ ํ•˜๋‚˜ ์ƒ์„ฑํ•˜์„ธ์š”. ์„ค์ •์„ ์ œ๋Œ€๋กœ ๋งˆ์ณค๋‹ค๋ฉด `localhost:8290` ๋กœ ๋“ค์–ด๊ฐ€๋ฉด ๋ฉ๋‹ˆ๋‹ค.

image

image

#### 2. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜์„ธ์š”

- ๋งŒ์•ฝ **๋ฉ”์‹œ์ง€๋ฅผ publish** ํ•˜๊ณ ์‹ถ๋‹ค๋ฉด `ZolaQueueMessagingTemplate` ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
- ๋งŒ์•ฝ **๋ฉ”์‹œ์ง€๋ฅผ consume** ํ•˜๊ณ ์‹ถ๋‹ค๋ฉด `@ZolaConsumer` ์™€ `@ZolaMessageListener` ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

```java
@RequiredArgsConstructor
public class MessageProducer {

private final ZolaQueueMessageTemplate template;

public void send() {
template.convertAndSend("MY-QUEUE", "foo");
}
}
```

### consume message

message ๋ฅผ consume ํ•  ๋•Œ๋Š” `zsmq.listening` ์†์„ฑ์ด true ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

```java
@Component
@ZolaConsumer
public class MyConsumer {

@ZolaMessageListener(queueName = "MY-QUEUE", deletionPolicy = DeletionPolicy.ALWAYS)
public void listen(String message) {
System.out.println("message = " + message);
}
}
```

> ์ž์„ธํ•œ ์„ค์ •๋“ค์„ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด [example](https://github.com/dhslrl321/zsmq-example) ์„ ํ™•์ธํ•˜์„ธ์š”. zsmq ๋ฅผ ์ด์šฉํ•œ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

# Motivation

์–ด๋А๋‚ , ์–ด๋–ค ํ•™์Šต์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฉ”์‹œ์ง€ ํ ํ•˜๋‚˜๊ฐ€ ํ•„์š”ํ–ˆ๋˜ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ ํ•™์Šต์—๋Š” ๋ฉ”์‹œ์ง€ ํ์— ๋Œ€ํ•œ ์ง€์‹์ด ๊นŠ๊ฒŒ ํ•„์š”ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ํ•™์Šต์„ ์ด์–ด๊ฐ€๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฉ”์‹œ์ง€ ํ๊ฐ€ ๊ผญ ํ•„์š”ํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ €๋Š” ๋ฉ”์‹œ์ง€ ํ๋ฅผ ์„ค์ •ํ•˜๊ณ  ์ƒ์„ฑ ๋ฐ ์‚ฌ์šฉํ•˜๋Š”๋ฐ์— ์•„์ฃผ ๋งŽ์€ ์‹œ๊ฐ„์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ €๋Š” ๋‚ฎ์€ ์„ฑ๋Šฅ์ผ์ง€๋ผ๋„ ๋งค์šฐ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ์„ค์ •ํ•˜๊ณ  ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ํ๋ฅผ ๋งŒ๋“ค์ž๋Š” ๊ฒฐ์‹ฌ์„ ํ•˜์˜€๊ณ  ์ด๊ฒƒ์ด ๋ฐ”๋กœ zsmq ์˜ ์‹œ์ž‘์ž…๋‹ˆ๋‹ค.

> 'zola' is a korean slang. It means 'utterly', 'extremely', 'super', 'very'