Files
amq-adapter-python/compose.yaml

245 lines
7.5 KiB
YAML
Executable File

name: clever_micro
services:
rabbitmq: # copied from cleverdata backend branch feat/#190
image: rabbitmq:3-management
hostname: "my-rabbit"
environment:
RABBITMQ_DEFAULT_USER: springuser
RABBITMQ_DEFAULT_PASS: TheCleverWho
volumes:
- "./container-data/rabbitmq/enabled_plugins:/etc/rabbitmq/enabled_plugins"
# - "./container-data/mq-data:/var/lib/rabbitmq"
ports:
- "5672:5672"
- "8888:15672"
healthcheck:
test: ["CMD-SHELL", "rabbitmq-diagnostics -q ping"]
interval: 30s
timeout: 10s
retries: 3
traefik:
image: "traefik:v3.2"
container_name: "traefik"
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entryPoints.web.address=:8085"
labels:
- "traefik.enable=true"
ports:
- "8085:8085"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
jaeger:
image: "jaegertracing/all-in-one:latest"
ports:
- "16686:16686" # Jaeger UI
- "14268:14268" # Jaeger collector Accepts jaeger.thrift spans directly over HTTP
- "14250:14250" # Jaeger gRPC Accepts model.proto spans over gRPC
- "6831:6831/udp" # Jaeger agent Accepts jaeger.thrift spans (Thrift compact)
- "6832:6832/udp" # Jaeger agent Accepts jaeger.thrift spans (Thrift binary)
- "5778:5778" # Jaeger agent admin + configuration
- "4317:4317" # OpenTelemetry Protocol (OTLP) gRPC receiver
- "4318:4318" # OpenTelemetry Protocol (OTLP) HTTP/protobuf receiver
- "14269:14269" # Jaeger health check
- "9411:9411" # Zipkin compatibility
environment:
COLLECTOR_ZIPKIN_HTTP_PORT: 9411
COLLECTOR_OTLP_ENABLED: true
amqp-router:
build:
context: .
dockerfile: Dockerfile
# dockerfile: Dockerfile.amqp-adapter
#image: "amq-python:latest"
image: "amqp_router:latest"
ports:
- "${AMQ_ADAPTER_PORT:-8081}:8080"
environment:
cm.amq-adapter.service-name: "amq-router"
cm.amq-adapter.is-router: "true"
cm.amq-adapter.generator-id: 164
cm.amq-adapter.route-mapping: "null"
cm.dispatch.use-dlq: true
cm.dispatch.use-confirms: false
cm.dispatch.amq-host: rabbitmq
cm.dispatch.amq-port: 5672
cm.dispatch.amq-port-tls: 5671
cm.backpressure.threshold: 20
cm.backpressure.time-window: 3000
cm.backpressure.management-service-url: "management-service:8080"
quarkus.otel.exporter.otlp.endpoint: "http://jaeger:4317"
quarkus.application.name: API-Gateway-AMQ-Adapter
quarkus.otel.service.name: API-Gateway-AMQ-Adapter
env_file:
- .env_secrets
labels:
- "traefik.enable=true"
- "traefik.http.routers.router-app.rule=PathPrefix(`/`)" # default route
- "traefik.http.routers.router-app.entrypoints=web"
depends_on:
rabbitmq:
condition: service_healthy
healthcheck:
test: ["CMD-SHELL", "curl http://localhost:8080/amq-adapter-healthcheck"]
interval: 30s
timeout: 10s
retries: 3
#
# DLQ is special case of AMQ adapter that will handle rejected messages
#
dead-letter-queue-handler:
image: "amqp_router:latest"
ports:
- "${DLQ_ADAPTER_PORT:-8089}:8080"
environment:
cm.amq-adapter.service-name: "amq-dlq"
cm.amq-adapter.is-router: "false"
cm.amq-adapter.generator-id: 165
cm.amq-adapter.route-mapping: "amq-dlq:DLX:DeadLetterQueue:#:0:0"
cm.dispatch.use-dlq: false
cm.dispatch.use-confirms: false
cm.dispatch.amq-host: rabbitmq
cm.dispatch.amq-port: 5672
cm.dispatch.amq-port-tls: 5671
cm.backpressure.threshold: 20
cm.backpressure.time-window: 3000
cm.backpressure.management-service-url: "management-service:8080"
quarkus.application.name: AMQ-DeadLetterQueue
quarkus.otel.exporter.otlp.endpoint: "http://jaeger:4317"
OTEL_EXPORTER_OTLP_ENDPOINT: "http://jaeger:4317"
env_file:
- .env_secrets
depends_on:
amqp-router:
condition: service_healthy
#
# test applications
#
amq-clever-book:
image: "amqp_router:latest"
ports:
- "16000:8080"
environment:
cm.amq-adapter.service-name: "amq-cleverbook-adapter"
cm.amq-adapter.generator-id: 16
cm.amq-adapter.route-mapping: "amq-clever-book::amq-clever-book:clever.book.localhost.#:5:0"
cm.dispatch.use-dlq: true
cm.dispatch.use-confirms: false
cm.dispatch.amq-host: rabbitmq
cm.dispatch.amq-port: 5672
cm.dispatch.amq-port-tls: 5671
cm.dispatch.service-host: clever-book
cm.dispatch.service-port: 8080
cm.backpressure.threshold: 20
cm.backpressure.time-window: 3000
cm.backpressure.management-service-url: "management-service:8080"
quarkus.otel.service.name: CleverBook-AMQ-Adapter
quarkus.application.name: CleverBook-AMQ-Adapter
quarkus.otel.exporter.otlp.endpoint: "http://jaeger:4317"
OTEL_EXPORTER_OTLP_ENDPOINT: "http://jaeger:4317"
env_file:
- .env_secrets
depends_on:
amqp-router:
condition: service_healthy
#
# Dummy app allowing POST and GET operations over REST API, emulating a real SpringBoot service
#
clever-book:
build:
context: clever-book/
dockerfile: Dockerfile
image: "book-management:latest"
ports:
- "16002:8080"
restart: on-failure
environment:
SPRING_PROFILES_ACTIVE: prod
SPRING_APPLICATION_NAME: CleverBook
spring.application.name: CleverBook
OTEL_EXPORTER_OTLP_ENDPOINT: "http://jaeger:4317"
otel.exporter.otlp.endpoint: "http://jaeger:4317"
env_file:
- .env_secrets
depends_on:
amqp-router:
condition: service_healthy
#
# a black box 3rd party app provisioned as-is
#
black-box-3rd-party:
image: "traefik/whoami"
container_name: "blackbox-third-party"
labels:
- "traefik.enable=true"
- "traefik.http.routers.whoami.rule=Host(`whoami.localhost`)"
- "traefik.http.routers.whoami.entrypoints=web"
#
# test applications for python
#
amq-clever-pybook:
image: "amq-python:latest"
# image: "amqp_router:latest"
ports:
- "16020:8080"
environment:
cm.amq-adapter.service-name: "amq-cleverpybook-adapter"
cm.amq-adapter.generator-id: 211
cm.amq-adapter.route-mapping: "amq-clever-pybook::amq-clever-pybook:clever.pybook.localhost.#:5:0"
cm.dispatch.use-dlq: true
cm.dispatch.use-confirms: false
cm.dispatch.amq-host: rabbitmq
cm.dispatch.amq-port: 5672
cm.dispatch.amq-port-tls: 5671
cm.dispatch.service-host: clever-pybook
cm.dispatch.service-port: 5000
cm.backpressure.threshold: 20
cm.backpressure.time-window: 3000
cm.backpressure.management-service-url: "management-service:8080"
quarkus.otel.service.name: CleverPyBook-AMQ-Adapter
quarkus.application.name: CleverPyBook-AMQ-Adapter
quarkus.otel.exporter.otlp.endpoint: "http://jaeger:4317"
OTEL_EXPORTER_OTLP_ENDPOINT: "http://jaeger:4317"
env_file:
- .env_secrets
depends_on:
amqp-router:
condition: service_healthy
#
# Dummy app allowing POST and GET operations over REST API, emulating a real SpringBoot service
#
clever-pybook:
image: "clever-pybook:latest"
ports:
- "16012:5000"
restart: on-failure
environment:
OTEL_EXPORTER_OTLP_ENDPOINT: "http://jaeger:4317"
OTEL_EXPORTER_OTLP_INSECURE: "true"
depends_on:
amqp-router:
condition: service_healthy