하나의 봇에 여러개의 어플리케이션을 연결이 안되는것으로 확인이 됩니다(Interactivity가 하나). 그래서 중간에 kafka를 두고 이를 통해서 micro service를 만들어 보겠습니다.
- slack bot에 대한 응답은 intractivty 서비스가 받아서 payload를 그데로 kafka에 메세지를 발행한다.
- 야근 서비스와 탄련근무 서비스는 kafka를 구동하고 있기에 각각의 서비스가 처리해야할 메시지이면 처리한다.
- 추후에 확장을 원한다면 야근서비스, 탄력근무처럼 kafka만 구독하면 서비스를 늘리는것이 가능하다.
reversProxy(nginx)를 사용합니다. 그렇기에 다른 서비스가 켜지고 나면 후에 서비스가 동작하도록 하였음. nginx에서 다른 컨테이너와 연결이 용이하도록 같은 network이여야 합니다.
version: "3"
services:
reverse-proxy:
image: nginx
ports:
- "80:80"
restart: always
depends_on:
- bot-listener
- extra-work
- time-loan
networks:
- slackEvent
volumes:
- ./proxy/nginx.conf:/etc/nginx/nginx.conf
# DB는 별도로 운영
# mongodb:
# image: mongo
# container_name: mongodb
# restart: always
# volumes:
# - ./mongodb:/data/db
# networks:
# - slackEvent
bot-listener:
container_name: slackbot_kafka_bot_listener
build:
context: .
dockerfile: Dockerfile.botlistener
# ports:
# - "8282:8181"
networks:
- slackEvent
extra-work:
container_name: slackbot_kafka_extra_work
build:
context: .
dockerfile: Dockerfile.extraworkservice
# ports:
# - "8383:8181"
depends_on:
- bot-listener
networks:
- slackEvent
time-loan:
container_name: slackbot_kafka_time_loan
build:
context: .
dockerfile: Dockerfile.timeloanservice
# ports:
# - "8484:8181"
depends_on:
- bot-listener
networks:
- slackEvent
networks:
slackEvent:
{
"databasetype": "mongodb", // 디비종류선택
"dbconnection": <connectionstring>,
"restfulapi_endpoint": "localhost:3000"// restapi 오픈번호,
"slack_token": <slack_token>,
"kafka_message_brokers": [<kafka_sever1>, .....]
}