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.
- Host: GitHub
- URL: https://github.com/dhslrl321/zsmq
- Owner: dhslrl321
- License: apache-2.0
- Created: 2022-08-31T01:05:44.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2022-11-14T14:55:12.000Z (over 3 years ago)
- Last Synced: 2023-03-07T15:37:29.944Z (over 3 years ago)
- Topics: docker, message-queue, message-queue-server, messaging
- Language: Java
- Homepage:
- Size: 718 KB
- Stars: 43
- Watchers: 2
- Forks: 3
- Open Issues: 6
-
Metadata Files:
- Readme: README-kor.md
- License: LICENSE
Awesome Lists containing this project
- awesome-java - ZSMQ
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` ๋ก ๋ค์ด๊ฐ๋ฉด ๋ฉ๋๋ค.


#### 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'