https://gitpod.io/#https://github.com/event-storming/ddd-petstore
- 접속 후 "Terminal > Terminal열기"
- httpie (curl / POSTMAN 대용)
pip install httpie
- Kafka Download
wget https://dlcdn.apache.org/kafka/3.1.0/kafka_2.13-3.1.0.tgz
tar -xf kafka_2.13-3.1.0.tgz
- Run Kafka
cd kafka_2.13-3.1.0/
bin/zookeeper-server-start.sh config/zookeeper.properties &
bin/kafka-server-start.sh config/server.properties &
- Kafka Event 컨슈밍하기 (별도 터미널)
cd kafka_2.13-3.1.0/
bin/kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --topic petstore
- 새로운 터미널을 열어 Pet 서비스를 기동한다. (8081)
cd pet-domain
mvn install
mvn spring-boot:run
- 새로운 터미널을 열어 pet을 한 마리 등록해 줍니다.
http :8081/cats name="몽이" energy=1
- Pet 에 먹이를 한번 줘봅니다.
http PUT "http://localhost:8081/cats/1/feed"
- Pet 의 에너지가 상승함을 확인합니다.
http "http://localhost:8081/cats/1"
- Pet 의 털도 한번 가꿔봅니다:
http PUT "http://localhost:8081/cats/1/groom"
- Pet 의 외모지수가 상승함을 확인합니다.
http "http://localhost:8081/cats/1"
- 또 다른 터미널을 열어서 Store 서비스를 기동합니다. (8083)
cd store-domain
mvn spring-boot:run
- 유저를 한 명 등록해 줍니다.
http localhost:8083/customers id="[email protected]" address[zipcode]="123" address[detail]="용인"
- items 에 Pet 도메인에서 등록된 애완동물들이 동기화 되어 있는 것을 확인한다:
http :8083/items
- 자동으로 등록이 안되었다면 수동으로 등록을 해줘야 한다 (두마리를 등록해본다):
http "http://localhost:8083/items" apperance=1 health=2 price[currency]="KR_WON" price[amount]="100000"
http "http://localhost:8083/items" apperance=2 health=1 price[currency]="EURO" price[amount]=200
- 아까 등록한 두마리를 입양해본다. 이때는 한번의 Aggregate 이므로 한번에 등록이 되어야 한다.
http :8083/cartItems customer="http://localhost:8083/customers/[email protected]" items:='["http://localhost:8083/items/1", "http://localhost:8083/items/2"]'
- pom.xml
- Application.java 의 @EnableBinding(KafkaProcessor.java)
- kafka/KafkaProcessor.java
- resources/application.yaml
- AbstractEvent.java
- PolicyHandler.java
- domain event 들: PetReserved.java / PetUpdated.java
cd gateway
mvn spring-boot:run
서비스가 기동된 후, gateway 로 단일화된 주소로 접근이 가능함을 확인합니다:
http localhost:8088/pets # service url of pet domain
http localhost:8088/cartItems # service url of store domain
각 프로젝트 내에는 Dockerfile 이 포함되어있습니다. 이것을 빌드하기 위해서는 우선 maven 빌드로 jar 를 만들어준 후, jar 를 Dockerfile 로 다시 빌드해줍니다:
cd pet-store
mvn package -B
docker build -t pet:v1 .
docker run pet:v1
Helm(패키지 인스톨러) 설치
- Helm 3.x 설치(권장)
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 > get_helm.sh
chmod 700 get_helm.sh
./get_helm.sh
helm repo update
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install my-kafka bitnami/kafka