-
Notifications
You must be signed in to change notification settings - Fork 3
Getting Started (5min) korean ver
ZSMQ λ₯Ό μ΄μ©ν΄μ 5λΆλ§μ λ©μμ§ νλ«νΌμ ꡬμ±ν΄λ΄ μλ€.
μμ λ λ€μκ³Ό κ°μ μν©μ ꡬνν©λλ€.
![image](https://user-images.githubusercontent.com/48385288/193443880-2538a642-7d87-4fd3-89dd-70cbc587f688.png)
-
order-service μμ λκ°μ§ μ΄λ²€νΈλ₯Ό λ°νν©λλ€.
ORDER-CONFIRMED
ORDER-CANCELED
-
delivery-service μμλ λκ°μ§ μ΄λ²€νΈλ₯Ό consume ν©λλ€
-
ORDER-CONFIRMED
μ payload λ κ°μ²΄ ννμ λλ€. -
ORDER-CANCELED
μ payload λ String ννμ λλ€.
-
κ΅¬μ± μμλ README μ μ‘΄μ¬νλ quick start λ₯Ό κ·Έλλ‘ λ°λ¦ λλ€.
- run messaging server and dashboard
- gradle dependency
- configure property
- just U.S.E it
μ°μ λ컀λ₯Ό μ΄μ©ν΄μ messaging μλ²μ dashboard λ₯Ό μ€νμν΅λλ€.
![image](https://user-images.githubusercontent.com/48385288/193444017-82f42de5-eee0-4273-bed2-9d860f7ec9e5.png)
μ μ€νλ κ²μ νμΈν©λλ€.
gradle μμ‘΄μ±μ μΆκ°νκΈ° μν΄μ λκ°μ spring application μ μμ±ν΄μ€λλ€.
![image](https://user-images.githubusercontent.com/48385288/193444059-7bf7e383-ce4d-4f61-917d-739bb292757f.png)
κ·Έλ¦¬κ³ κ°κ°μ build.gradle
μμ μμ‘΄μ±μ μΆκ°ν©λλ€.
![image](https://user-images.githubusercontent.com/48385288/193444105-bf8c6a7b-2fe2-40b0-81cf-a679de73e5b8.png)
version μ release note λ₯Ό νμΈν΄μ£ΌμΈμ
λ μ ν리μΌμ΄μ μ μ©λλ μλ‘ λ€λ¦ λλ€.
- order-service (produce)
- delivery-service (consume)
order-service λ λ©μμ§λ₯Ό λ°ννλ μ ν리μΌμ΄μ μ λλ€.
λ€μκ³Ό κ°μ΄ application.yml
μ€μ νμΈμ
![image](https://user-images.githubusercontent.com/48385288/193444204-e2f5be7a-00a0-47f3-9f09-11a8489a00b9.png)
zsmq.listening
μ false λ‘ μ€λ€λ κ²μ λ©μμ§ λ¦¬μ€λ μ€λ λλ₯Ό μ€νμν€μ§ μκ² λ€λ λ»μ
λλ€.
κ°λ¨ν Order κ°μ²΄λ₯Ό μ μνκ³ Order κ°μ²΄λ₯Ό delivery-service
λ‘ μ λ¬ν κ²μ
λλ€.
@Value(staticConstructor = "of")
public class Order {
String orderId;
String address;
int price;
}
κ·Έλ¦¬κ³ κ°λ¨ν message publisher λ₯Ό ꡬνν΄μ€λλ€.
@Component
@RequiredArgsConstructor
public class MessagePublisher {
private final ZolaQueueMessageTemplate template;
public void sendConfirmedMessage(Order order) {
template.convertAndSend("ORDER-CONFIRMED", order);
}
public void sendCanceledMessage(String orderId) {
template.convertAndSend("ORDER-CANCELED", orderId);
}
}
ZolaQueueMessageTemplate
λ₯Ό μ΄μ©ν΄μ convert μ send λ₯Ό μ½κ² μνν μ μμ΅λλ€.
κ°μ²΄ νμμΌλ‘ μ λ¬ν μλ μκ³ λ¨μ λ¬Έμμ΄ νμμΌλ‘ μ λ¬ν μ μμ΅λλ€.
@RestController
@RequiredArgsConstructor
public class OrderController {
private static final Order[] SAMPLE_ORDERS = {
Order.of(UUID.randomUUID().toString(), "Seoul", 125_000_000),
Order.of(UUID.randomUUID().toString(), "New York", 25_602_900),
Order.of(UUID.randomUUID().toString(), "singapore", 5_120_000),
Order.of(UUID.randomUUID().toString(), "tokyo", 9_000_000),
};
private final MessagePublisher publisher;
@GetMapping("/orders/{index}/confirm")
public boolean confirm(@PathVariable int index) {
try {
Order order = SAMPLE_ORDERS[index];
publisher.sendConfirmedMessage(order);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
@GetMapping("/orders/{index}/cancel")
public boolean cancel(@PathVariable int index) {
try {
String orderId = SAMPLE_ORDERS[index].getOrderId();
publisher.sendCanceledMessage(orderId);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}
κ°λ¨ν controller λ₯Ό ꡬνν΄μ€μλ€.
2κ°μ api κ° μ‘΄μ¬ν©λλ€.
-
orders/{index}/confirm
: κ°μ²΄λ₯Ό publish -
orders/{index}/cancel
: λ¬Έμμ΄μ publish
μ΄μ message λ₯Ό produce νλ μͺ½μ λͺ¨λ μ€λΉκ° λλ¬μ΅λλ€.
delivery-service
λ λ©μμ§λ₯Ό consume ν κ²μ΄κΈ° λλ¬Έμ λ€μκ³Ό κ°μ΄ yml μ 리μ€λ μ€λ λλ₯Ό νμ±νμμΌμ€μΌ ν©λλ€.
![image](https://user-images.githubusercontent.com/48385288/193455483-20358a1f-4531-4267-8214-3a6044bded05.png)
zsmq.listening
λ₯Ό true λ‘ μ€μ νμΈμ.
λκ°μ νλ₯Ό consuming ν λ€μ λ processor λ₯Ό λ§λ€μ΄μ£ΌμΈμ.
order-service
μ orders/{index}/cancel
κ° νΈμΆλλ©΄ λ°νλλ queue λ₯Ό consume ν©λλ€.
@Component
@ZolaConsumer
@Slf4j
public class OrderCanceledProcessor {
@ZolaMessageListener(queueName="ORDER-CANCELED", deletionPolicy = DeletionPolicy.ALWAYS)
public void listen(String message) {
log.info("order was canceled id: [{}]", message);
}
}
@ZolaMessageListener
λ₯Ό μ¬μ©ν λ λ©μλμ νλΌλ―Έν°λ νλμ String νμ
μ΄μ΄μΌ ν©λλ€.
ν΄λΉ 맀κ°λ³μλ‘ consume ν λ°μ΄ν°λ₯Ό μ λ¬ν©λλ€.
order-service
μ orders/{index}/confirm
κ° νΈμΆλλ©΄ λ°νλλ queue λ₯Ό consume ν©λλ€.
@Component
@ZolaConsumer
@Slf4j
public class OrderConfirmedProcessor {
@ZolaMessageListener(queueName="ORDER-CONFIRMED", deletionPolicy = DeletionPolicy.ALWAYS)
public void listen(String message) {
log.info("json : {}", message);
Order order = ZolaJsonSerializer.getInstance().deserialize(message, Order.class);
log.info("order was confirmed : id : {}, address: {}, price: {}", order.getOrderId(), order.getAddress(), order.getPrice());
}
}
Object λ₯Ό publish νλ€λ©΄ json ννλ‘ λ°μ΄ν°λ₯Ό λ°μμ΅λλ€.
ZolaJsonSerializer
λ₯Ό μ¬μ©νλ©΄ json μ μ½κ²
μ΄μ λͺ¨λ κ°λ°μ΄ λλ¬μ΅λλ€.
μ€ν κ²°κ³Όλ₯Ό νμΈν΄λ΄ μλ€
μ°μ νλ₯Ό λ§λ€μ΄μΌ ν©λλ€.
localhost:8290
μΌλ‘ μ€νλλ dashboard μ μ μνμΈμ.
![image](https://user-images.githubusercontent.com/48385288/193455864-8f057429-10e6-4b3d-91a9-5588d6db7358.png)
μ°λ¦¬λ 2κ°μ νλ₯Ό μμ±ν΄μΌ ν©λλ€. μ€λ₯Έμͺ½μ νμμ QUEUE μμ± λ©λ΄λ₯Ό ν΄λ¦νκ³ νλ₯Ό μΆκ°νμΈμ
![image](https://user-images.githubusercontent.com/48385288/193455885-6bdbdd16-e8f5-465f-8319-da94cfc6f0d4.png)
λκ°μ νλ₯Ό λͺ¨λ μΆκ°ν΄μ€λλ€.
![image](https://user-images.githubusercontent.com/48385288/193455898-64ab49b3-200c-4358-ae0b-40e3bef75de4.png)
κ·Έλ¦¬κ³ order-service
μ delivery-service
λ₯Ό μ€νμμΌμ£ΌμΈμ
κ·Έλ¦¬κ³ order-service
μ api λ₯Ό μ μ‘ν΄λ΄
μλ€.
![image](https://user-images.githubusercontent.com/48385288/193456033-aff5fc67-8ea3-4ba4-9af3-3b222823afa9.png)
κ·ΈλΌ μλμ κ°μ΄ λ‘κ·Έκ° μ°νλ κ²μ νμΈν μ μμ΅λλ€.
![image](https://user-images.githubusercontent.com/48385288/193456066-8ff8a0f4-c781-466a-b1c3-ca402e9a9749.png)
νλλ json νν κ·Έλλ‘, λ€λ₯Έ νλλ κ°μ²΄μμ κΊΌλ΄μ¨λλ‘ μ μΆλ ₯λμλ€μ,
μ΄μ λλ¨Έμ§ cancel λ νΈμΆνλ©΄ λμΌνκ² κ²°κ³Όκ° λμ¬ κ²μ λλ€.
![image](https://user-images.githubusercontent.com/48385288/193456156-9a8d55a8-4bce-4f34-995f-24fc73b67ffb.png)
![image](https://user-images.githubusercontent.com/48385288/193456187-83c9ec37-04ff-4919-a522-78696d15ac7b.png)