container-superposition 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +843 -0
- package/dist/scripts/init.d.ts +3 -0
- package/dist/scripts/init.d.ts.map +1 -0
- package/dist/scripts/init.js +1190 -0
- package/dist/scripts/init.js.map +1 -0
- package/dist/scripts/migrate-to-manifests.d.ts +12 -0
- package/dist/scripts/migrate-to-manifests.d.ts.map +1 -0
- package/dist/scripts/migrate-to-manifests.js +230 -0
- package/dist/scripts/migrate-to-manifests.js.map +1 -0
- package/dist/tool/questionnaire/composer.d.ts +6 -0
- package/dist/tool/questionnaire/composer.d.ts.map +1 -0
- package/dist/tool/questionnaire/composer.js +1232 -0
- package/dist/tool/questionnaire/composer.js.map +1 -0
- package/dist/tool/readme/markdown-parser.d.ts +30 -0
- package/dist/tool/readme/markdown-parser.d.ts.map +1 -0
- package/dist/tool/readme/markdown-parser.js +139 -0
- package/dist/tool/readme/markdown-parser.js.map +1 -0
- package/dist/tool/readme/readme-generator.d.ts +9 -0
- package/dist/tool/readme/readme-generator.d.ts.map +1 -0
- package/dist/tool/readme/readme-generator.js +422 -0
- package/dist/tool/readme/readme-generator.js.map +1 -0
- package/dist/tool/schema/custom-loader.d.ts +17 -0
- package/dist/tool/schema/custom-loader.d.ts.map +1 -0
- package/dist/tool/schema/custom-loader.js +149 -0
- package/dist/tool/schema/custom-loader.js.map +1 -0
- package/dist/tool/schema/overlay-loader.d.ts +47 -0
- package/dist/tool/schema/overlay-loader.d.ts.map +1 -0
- package/dist/tool/schema/overlay-loader.js +252 -0
- package/dist/tool/schema/overlay-loader.js.map +1 -0
- package/dist/tool/schema/types.d.ts +212 -0
- package/dist/tool/schema/types.d.ts.map +1 -0
- package/dist/tool/schema/types.js +5 -0
- package/dist/tool/schema/types.js.map +1 -0
- package/docs/README.md +308 -0
- package/docs/architecture.md +233 -0
- package/docs/creating-overlays.md +549 -0
- package/docs/custom-patches.md +540 -0
- package/docs/dependencies.md +279 -0
- package/docs/examples/custom-patches-example.md +85 -0
- package/docs/examples.md +576 -0
- package/docs/messaging-comparison.md +265 -0
- package/docs/messaging-quick-start.md +385 -0
- package/docs/observability-workflow.md +537 -0
- package/docs/overlay-manifest-refactoring.md +214 -0
- package/docs/overlay-metadata-archive.md +54 -0
- package/docs/overlays.md +523 -0
- package/docs/presets-architecture.md +498 -0
- package/docs/presets.md +366 -0
- package/docs/publishing.md +476 -0
- package/docs/quick-reference.md +326 -0
- package/docs/ux.md +170 -0
- package/features/README.md +85 -0
- package/features/cross-distro-packages/README.md +146 -0
- package/features/cross-distro-packages/devcontainer-feature.json +20 -0
- package/features/cross-distro-packages/install.sh +58 -0
- package/features/local-secrets-manager/devcontainer-feature.json +18 -0
- package/features/local-secrets-manager/install.sh +127 -0
- package/features/project-scaffolder/devcontainer-feature.json +24 -0
- package/features/project-scaffolder/install.sh +100 -0
- package/features/team-conventions/devcontainer-feature.json +24 -0
- package/features/team-conventions/install.sh +93 -0
- package/overlays/.registry/README.md +14 -0
- package/overlays/.registry/base-images.yml +26 -0
- package/overlays/.registry/base-templates.yml +7 -0
- package/overlays/README.md +155 -0
- package/overlays/alertmanager/.env.example +5 -0
- package/overlays/alertmanager/README.md +465 -0
- package/overlays/alertmanager/alert-rules.yml +56 -0
- package/overlays/alertmanager/alertmanager.yml +42 -0
- package/overlays/alertmanager/devcontainer.patch.json +12 -0
- package/overlays/alertmanager/docker-compose.yml +20 -0
- package/overlays/alertmanager/overlay.yml +17 -0
- package/overlays/alertmanager/setup.sh +53 -0
- package/overlays/alertmanager/verify.sh +31 -0
- package/overlays/aws-cli/README.md +473 -0
- package/overlays/aws-cli/devcontainer.patch.json +13 -0
- package/overlays/aws-cli/overlay.yml +13 -0
- package/overlays/azure-cli/README.md +551 -0
- package/overlays/azure-cli/devcontainer.patch.json +8 -0
- package/overlays/azure-cli/overlay.yml +13 -0
- package/overlays/bun/README.md +312 -0
- package/overlays/bun/devcontainer.patch.json +41 -0
- package/overlays/bun/overlay.yml +16 -0
- package/overlays/bun/setup.sh +79 -0
- package/overlays/bun/verify.sh +30 -0
- package/overlays/codex/README.md +128 -0
- package/overlays/codex/devcontainer.patch.json +3 -0
- package/overlays/codex/overlay.yml +14 -0
- package/overlays/codex/setup.sh +24 -0
- package/overlays/codex/verify.sh +30 -0
- package/overlays/commitlint/README.md +333 -0
- package/overlays/commitlint/devcontainer.patch.json +8 -0
- package/overlays/commitlint/overlay.yml +16 -0
- package/overlays/commitlint/setup.sh +234 -0
- package/overlays/direnv/README.md +504 -0
- package/overlays/direnv/devcontainer.patch.json +6 -0
- package/overlays/direnv/overlay.yml +13 -0
- package/overlays/direnv/setup.sh +139 -0
- package/overlays/docker-in-docker/README.md +534 -0
- package/overlays/docker-in-docker/devcontainer.patch.json +10 -0
- package/overlays/docker-in-docker/overlay.yml +13 -0
- package/overlays/docker-sock/README.md +256 -0
- package/overlays/docker-sock/devcontainer.patch.json +9 -0
- package/overlays/docker-sock/docker-compose.yml +8 -0
- package/overlays/docker-sock/overlay.yml +13 -0
- package/overlays/dotnet/README.md +147 -0
- package/overlays/dotnet/devcontainer.patch.json +51 -0
- package/overlays/dotnet/global-tools.txt +24 -0
- package/overlays/dotnet/overlay.yml +13 -0
- package/overlays/dotnet/setup.sh +51 -0
- package/overlays/dotnet/verify.sh +26 -0
- package/overlays/gcloud/README.md +269 -0
- package/overlays/gcloud/devcontainer.patch.json +14 -0
- package/overlays/gcloud/overlay.yml +14 -0
- package/overlays/gcloud/verify.sh +52 -0
- package/overlays/git-helpers/README.md +168 -0
- package/overlays/git-helpers/devcontainer.patch.json +33 -0
- package/overlays/git-helpers/overlay.yml +15 -0
- package/overlays/git-helpers/setup.sh +91 -0
- package/overlays/go/README.md +293 -0
- package/overlays/go/devcontainer.patch.json +43 -0
- package/overlays/go/overlay.yml +15 -0
- package/overlays/go/setup.sh +33 -0
- package/overlays/go/verify.sh +40 -0
- package/overlays/grafana/.env.example +9 -0
- package/overlays/grafana/README.md +462 -0
- package/overlays/grafana/dashboard-provider.yml +11 -0
- package/overlays/grafana/dashboards/observability-overview.json +263 -0
- package/overlays/grafana/devcontainer.patch.json +12 -0
- package/overlays/grafana/docker-compose.yml +27 -0
- package/overlays/grafana/grafana-datasources.yml +57 -0
- package/overlays/grafana/overlay.yml +21 -0
- package/overlays/grafana/verify.sh +34 -0
- package/overlays/jaeger/.env.example +7 -0
- package/overlays/jaeger/README.md +867 -0
- package/overlays/jaeger/devcontainer.patch.json +12 -0
- package/overlays/jaeger/docker-compose.yml +17 -0
- package/overlays/jaeger/overlay.yml +19 -0
- package/overlays/java/README.md +267 -0
- package/overlays/java/devcontainer.patch.json +44 -0
- package/overlays/java/overlay.yml +16 -0
- package/overlays/java/setup.sh +41 -0
- package/overlays/java/verify.sh +42 -0
- package/overlays/just/README.md +443 -0
- package/overlays/just/devcontainer.patch.json +3 -0
- package/overlays/just/overlay.yml +13 -0
- package/overlays/just/setup.sh +182 -0
- package/overlays/kubectl-helm/README.md +660 -0
- package/overlays/kubectl-helm/devcontainer.patch.json +10 -0
- package/overlays/kubectl-helm/overlay.yml +13 -0
- package/overlays/loki/.env.example +5 -0
- package/overlays/loki/README.md +1156 -0
- package/overlays/loki/devcontainer.patch.json +12 -0
- package/overlays/loki/docker-compose.yml +18 -0
- package/overlays/loki/loki-config.yaml +45 -0
- package/overlays/loki/overlay.yml +17 -0
- package/overlays/minio/.env.example +9 -0
- package/overlays/minio/README.md +639 -0
- package/overlays/minio/devcontainer.patch.json +30 -0
- package/overlays/minio/docker-compose.yml +28 -0
- package/overlays/minio/overlay.yml +18 -0
- package/overlays/minio/setup.sh +61 -0
- package/overlays/minio/verify.sh +64 -0
- package/overlays/mkdocs/README.md +309 -0
- package/overlays/mkdocs/devcontainer.patch.json +24 -0
- package/overlays/mkdocs/overlay.yml +15 -0
- package/overlays/modern-cli-tools/README.md +556 -0
- package/overlays/modern-cli-tools/devcontainer.patch.json +3 -0
- package/overlays/modern-cli-tools/overlay.yml +13 -0
- package/overlays/modern-cli-tools/setup.sh +153 -0
- package/overlays/mongodb/.env.example +9 -0
- package/overlays/mongodb/README.md +481 -0
- package/overlays/mongodb/devcontainer.patch.json +32 -0
- package/overlays/mongodb/docker-compose.yml +44 -0
- package/overlays/mongodb/overlay.yml +17 -0
- package/overlays/mongodb/verify.sh +48 -0
- package/overlays/mysql/.env.example +11 -0
- package/overlays/mysql/README.md +542 -0
- package/overlays/mysql/devcontainer.patch.json +34 -0
- package/overlays/mysql/docker-compose.yml +55 -0
- package/overlays/mysql/overlay.yml +16 -0
- package/overlays/mysql/verify.sh +48 -0
- package/overlays/nats/.env.example +5 -0
- package/overlays/nats/README.md +762 -0
- package/overlays/nats/devcontainer.patch.json +24 -0
- package/overlays/nats/docker-compose.yml +31 -0
- package/overlays/nats/overlay.yml +18 -0
- package/overlays/nats/verify.sh +50 -0
- package/overlays/ngrok/README.md +503 -0
- package/overlays/ngrok/devcontainer.patch.json +3 -0
- package/overlays/ngrok/overlay.yml +14 -0
- package/overlays/ngrok/setup.sh +125 -0
- package/overlays/nodejs/README.md +192 -0
- package/overlays/nodejs/devcontainer.patch.json +49 -0
- package/overlays/nodejs/global-packages.txt +16 -0
- package/overlays/nodejs/overlay.yml +14 -0
- package/overlays/nodejs/setup.sh +46 -0
- package/overlays/nodejs/verify.sh +32 -0
- package/overlays/otel-collector/.env.example +9 -0
- package/overlays/otel-collector/README.md +1257 -0
- package/overlays/otel-collector/devcontainer.patch.json +28 -0
- package/overlays/otel-collector/docker-compose.yml +22 -0
- package/overlays/otel-collector/otel-collector-config.yaml +68 -0
- package/overlays/otel-collector/overlay.yml +21 -0
- package/overlays/otel-collector/setup.sh +49 -0
- package/overlays/otel-demo-nodejs/.env.example +2 -0
- package/overlays/otel-demo-nodejs/Dockerfile-otel-demo-nodejs +17 -0
- package/overlays/otel-demo-nodejs/README.md +409 -0
- package/overlays/otel-demo-nodejs/devcontainer.patch.json +12 -0
- package/overlays/otel-demo-nodejs/docker-compose.yml +19 -0
- package/overlays/otel-demo-nodejs/overlay.yml +23 -0
- package/overlays/otel-demo-nodejs/package-otel-demo-nodejs.json +20 -0
- package/overlays/otel-demo-nodejs/server-otel-demo-nodejs.js +259 -0
- package/overlays/otel-demo-nodejs/tracing-otel-demo-nodejs.js +57 -0
- package/overlays/otel-demo-nodejs/verify.sh +31 -0
- package/overlays/otel-demo-python/.env.example +2 -0
- package/overlays/otel-demo-python/Dockerfile-otel-demo-python +16 -0
- package/overlays/otel-demo-python/README.md +82 -0
- package/overlays/otel-demo-python/app-otel-demo-python.py +208 -0
- package/overlays/otel-demo-python/devcontainer.patch.json +12 -0
- package/overlays/otel-demo-python/docker-compose.yml +19 -0
- package/overlays/otel-demo-python/overlay.yml +23 -0
- package/overlays/otel-demo-python/requirements-otel-demo-python.txt +4 -0
- package/overlays/otel-demo-python/verify.sh +31 -0
- package/overlays/playwright/README.md +629 -0
- package/overlays/playwright/devcontainer.patch.json +9 -0
- package/overlays/playwright/overlay.yml +13 -0
- package/overlays/postgres/.env.example +6 -0
- package/overlays/postgres/README.md +602 -0
- package/overlays/postgres/devcontainer.patch.json +21 -0
- package/overlays/postgres/docker-compose.yml +22 -0
- package/overlays/postgres/overlay.yml +15 -0
- package/overlays/postgres/verify.sh +45 -0
- package/overlays/powershell/README.md +314 -0
- package/overlays/powershell/devcontainer.patch.json +22 -0
- package/overlays/powershell/overlay.yml +13 -0
- package/overlays/powershell/setup.sh +29 -0
- package/overlays/powershell/verify.sh +38 -0
- package/overlays/pre-commit/README.md +263 -0
- package/overlays/pre-commit/devcontainer.patch.json +9 -0
- package/overlays/pre-commit/overlay.yml +16 -0
- package/overlays/pre-commit/setup.sh +129 -0
- package/overlays/presets/docs-site.yml +118 -0
- package/overlays/presets/fullstack.yml +181 -0
- package/overlays/presets/microservice.yml +118 -0
- package/overlays/presets/web-api.yml +109 -0
- package/overlays/prometheus/.env.example +5 -0
- package/overlays/prometheus/README.md +1246 -0
- package/overlays/prometheus/devcontainer.patch.json +12 -0
- package/overlays/prometheus/docker-compose.yml +22 -0
- package/overlays/prometheus/overlay.yml +17 -0
- package/overlays/prometheus/prometheus.yml +12 -0
- package/overlays/prometheus/verify.sh +34 -0
- package/overlays/promtail/.env.example +2 -0
- package/overlays/promtail/README.md +357 -0
- package/overlays/promtail/devcontainer.patch.json +5 -0
- package/overlays/promtail/docker-compose.yml +16 -0
- package/overlays/promtail/overlay.yml +17 -0
- package/overlays/promtail/promtail-config.yaml +60 -0
- package/overlays/promtail/verify.sh +31 -0
- package/overlays/pulumi/README.md +472 -0
- package/overlays/pulumi/devcontainer.patch.json +13 -0
- package/overlays/pulumi/overlay.yml +14 -0
- package/overlays/pulumi/verify.sh +31 -0
- package/overlays/python/README.md +919 -0
- package/overlays/python/devcontainer.patch.json +41 -0
- package/overlays/python/overlay.yml +12 -0
- package/overlays/python/requirements-overlay.txt +13 -0
- package/overlays/python/setup.sh +47 -0
- package/overlays/python/verify.sh +32 -0
- package/overlays/rabbitmq/.env.example +7 -0
- package/overlays/rabbitmq/README.md +680 -0
- package/overlays/rabbitmq/devcontainer.patch.json +28 -0
- package/overlays/rabbitmq/docker-compose.yml +30 -0
- package/overlays/rabbitmq/overlay.yml +18 -0
- package/overlays/rabbitmq/verify.sh +41 -0
- package/overlays/redis/.env.example +4 -0
- package/overlays/redis/README.md +776 -0
- package/overlays/redis/devcontainer.patch.json +21 -0
- package/overlays/redis/docker-compose.yml +21 -0
- package/overlays/redis/overlay.yml +15 -0
- package/overlays/redis/verify.sh +41 -0
- package/overlays/redpanda/.env.example +10 -0
- package/overlays/redpanda/README.md +703 -0
- package/overlays/redpanda/devcontainer.patch.json +37 -0
- package/overlays/redpanda/docker-compose.yml +67 -0
- package/overlays/redpanda/overlay.yml +21 -0
- package/overlays/redpanda/verify.sh +48 -0
- package/overlays/rust/README.md +299 -0
- package/overlays/rust/devcontainer.patch.json +39 -0
- package/overlays/rust/overlay.yml +15 -0
- package/overlays/rust/setup.sh +36 -0
- package/overlays/rust/verify.sh +51 -0
- package/overlays/sqlite/README.md +584 -0
- package/overlays/sqlite/devcontainer.patch.json +14 -0
- package/overlays/sqlite/overlay.yml +15 -0
- package/overlays/sqlite/setup.sh +27 -0
- package/overlays/sqlite/verify.sh +43 -0
- package/overlays/sqlserver/.env.example +6 -0
- package/overlays/sqlserver/README.md +592 -0
- package/overlays/sqlserver/devcontainer.patch.json +22 -0
- package/overlays/sqlserver/docker-compose.yml +32 -0
- package/overlays/sqlserver/overlay.yml +17 -0
- package/overlays/sqlserver/verify.sh +30 -0
- package/overlays/tempo/.env.example +5 -0
- package/overlays/tempo/README.md +273 -0
- package/overlays/tempo/devcontainer.patch.json +12 -0
- package/overlays/tempo/docker-compose.yml +20 -0
- package/overlays/tempo/overlay.yml +20 -0
- package/overlays/tempo/tempo-config.yaml +32 -0
- package/overlays/tempo/verify.sh +31 -0
- package/overlays/terraform/README.md +389 -0
- package/overlays/terraform/devcontainer.patch.json +15 -0
- package/overlays/terraform/overlay.yml +14 -0
- package/overlays/terraform/verify.sh +63 -0
- package/package.json +74 -0
- package/templates/README.md +285 -0
- package/templates/compose/.devcontainer/devcontainer.json +46 -0
- package/templates/compose/.devcontainer/docker-compose.yml +12 -0
- package/templates/compose/README.md +20 -0
- package/templates/plain/.devcontainer/devcontainer.json +35 -0
- package/templates/plain/README.md +21 -0
- package/tool/README.md +281 -0
- package/tool/schema/base-images.schema.json +43 -0
- package/tool/schema/base-templates.schema.json +34 -0
- package/tool/schema/config.schema.json +71 -0
- package/tool/schema/overlay-manifest.schema.json +86 -0
|
@@ -0,0 +1,680 @@
|
|
|
1
|
+
# RabbitMQ Overlay
|
|
2
|
+
|
|
3
|
+
RabbitMQ message broker for task queues, pub/sub messaging, and microservices communication.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **RabbitMQ 3** - Latest stable version with AMQP protocol support
|
|
8
|
+
- **Management UI** - Web-based interface for monitoring and management (port 15672)
|
|
9
|
+
- **Message persistence** - Optional message and queue persistence
|
|
10
|
+
- **Docker Compose service** - Runs as separate container
|
|
11
|
+
- **Pre-configured** - Ready to use with default vhost and credentials
|
|
12
|
+
- **Environment configuration** - Customizable via `.env` file
|
|
13
|
+
|
|
14
|
+
## How It Works
|
|
15
|
+
|
|
16
|
+
This overlay adds RabbitMQ as a Docker Compose service that runs alongside your development container. RabbitMQ provides message queuing and routing capabilities using the AMQP protocol.
|
|
17
|
+
|
|
18
|
+
**Architecture:**
|
|
19
|
+
|
|
20
|
+
```mermaid
|
|
21
|
+
graph TD
|
|
22
|
+
A[Development Container<br/>Your application code<br/>AMQP client libraries<br/>Connects to rabbitmq:5672] -->|Docker network devnet| B[RabbitMQ Container<br/>AMQP server 5672<br/>Management UI 15672<br/>Message/queue persistence]
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Configuration
|
|
26
|
+
|
|
27
|
+
### Environment Variables
|
|
28
|
+
|
|
29
|
+
The overlay includes a `.env.example` file. Copy it to `.env` and customize:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
cd .devcontainer
|
|
33
|
+
cp .env.example .env
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**Default values (.env.example):**
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# RabbitMQ Configuration
|
|
40
|
+
RABBITMQ_VERSION=3-management
|
|
41
|
+
RABBITMQ_USER=guest
|
|
42
|
+
RABBITMQ_PASSWORD=guest
|
|
43
|
+
RABBITMQ_VHOST=/
|
|
44
|
+
RABBITMQ_PORT=5672
|
|
45
|
+
RABBITMQ_MANAGEMENT_PORT=15672
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
⚠️ **Security Note:** Default credentials (guest/guest) are suitable for development only. Change these for production environments.
|
|
49
|
+
|
|
50
|
+
### Port Configuration
|
|
51
|
+
|
|
52
|
+
Default ports can be changed via the `--port-offset` option:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# Offset all ports by 100
|
|
56
|
+
container-superposition --port-offset 100
|
|
57
|
+
|
|
58
|
+
# RabbitMQ will be on:
|
|
59
|
+
# - AMQP: 5772 (instead of 5672)
|
|
60
|
+
# - Management UI: 15772 (instead of 15672)
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Connection Information
|
|
64
|
+
|
|
65
|
+
### From Development Container
|
|
66
|
+
|
|
67
|
+
**AMQP Connection:**
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# Hostname: rabbitmq (Docker Compose service name)
|
|
71
|
+
# Port: 5672
|
|
72
|
+
# Username: guest (or value from .env)
|
|
73
|
+
# Password: guest (or value from .env)
|
|
74
|
+
# Virtual host: / (default)
|
|
75
|
+
|
|
76
|
+
# Connection string
|
|
77
|
+
amqp://guest:guest@rabbitmq:5672/
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**Management UI:**
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
http://rabbitmq:15672
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### From Host Machine
|
|
87
|
+
|
|
88
|
+
**AMQP Connection:**
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
# Hostname: localhost
|
|
92
|
+
# Port: 5672 (or 5672 + port-offset)
|
|
93
|
+
|
|
94
|
+
# Connection string
|
|
95
|
+
amqp://guest:guest@localhost:5672/
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**Management UI:**
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
http://localhost:15672
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Login with credentials from `.env` (default: guest/guest)
|
|
105
|
+
|
|
106
|
+
## Common Commands
|
|
107
|
+
|
|
108
|
+
### Using RabbitMQ Management UI
|
|
109
|
+
|
|
110
|
+
The Management UI provides:
|
|
111
|
+
|
|
112
|
+
- Queue and exchange monitoring
|
|
113
|
+
- Message routing visualization
|
|
114
|
+
- Connection and channel statistics
|
|
115
|
+
- Message publishing and consumption
|
|
116
|
+
- User and permission management
|
|
117
|
+
|
|
118
|
+
Access it at: `http://localhost:15672`
|
|
119
|
+
|
|
120
|
+
### Using CLI (via docker exec)
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
# List queues
|
|
124
|
+
docker exec rabbitmq rabbitmqctl list_queues
|
|
125
|
+
|
|
126
|
+
# List exchanges
|
|
127
|
+
docker exec rabbitmq rabbitmqctl list_exchanges
|
|
128
|
+
|
|
129
|
+
# List bindings
|
|
130
|
+
docker exec rabbitmq rabbitmqctl list_bindings
|
|
131
|
+
|
|
132
|
+
# Check cluster status
|
|
133
|
+
docker exec rabbitmq rabbitmqctl cluster_status
|
|
134
|
+
|
|
135
|
+
# Check node status
|
|
136
|
+
docker exec rabbitmq rabbitmqctl status
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Creating Queues and Exchanges
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
# Declare a queue
|
|
143
|
+
docker exec rabbitmq rabbitmqadmin declare queue name=my-queue durable=true
|
|
144
|
+
|
|
145
|
+
# Declare an exchange
|
|
146
|
+
docker exec rabbitmq rabbitmqadmin declare exchange name=my-exchange type=direct
|
|
147
|
+
|
|
148
|
+
# Bind queue to exchange
|
|
149
|
+
docker exec rabbitmq rabbitmqadmin declare binding source=my-exchange destination=my-queue routing_key=my-key
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Application Integration
|
|
153
|
+
|
|
154
|
+
### Node.js Example
|
|
155
|
+
|
|
156
|
+
Install the AMQP library:
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
npm install amqplib
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
**Publisher (producer.js):**
|
|
163
|
+
|
|
164
|
+
```javascript
|
|
165
|
+
const amqp = require('amqplib');
|
|
166
|
+
|
|
167
|
+
async function publishMessage() {
|
|
168
|
+
const connection = await amqp.connect('amqp://guest:guest@rabbitmq:5672/');
|
|
169
|
+
const channel = await connection.createChannel();
|
|
170
|
+
|
|
171
|
+
const queue = 'task_queue';
|
|
172
|
+
const message = 'Hello RabbitMQ!';
|
|
173
|
+
|
|
174
|
+
await channel.assertQueue(queue, { durable: true });
|
|
175
|
+
channel.sendToQueue(queue, Buffer.from(message), { persistent: true });
|
|
176
|
+
|
|
177
|
+
console.log(`Sent: ${message}`);
|
|
178
|
+
|
|
179
|
+
setTimeout(() => {
|
|
180
|
+
connection.close();
|
|
181
|
+
}, 500);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
publishMessage().catch(console.error);
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
**Consumer (consumer.js):**
|
|
188
|
+
|
|
189
|
+
```javascript
|
|
190
|
+
const amqp = require('amqplib');
|
|
191
|
+
|
|
192
|
+
async function consumeMessages() {
|
|
193
|
+
const connection = await amqp.connect('amqp://guest:guest@rabbitmq:5672/');
|
|
194
|
+
const channel = await connection.createChannel();
|
|
195
|
+
|
|
196
|
+
const queue = 'task_queue';
|
|
197
|
+
|
|
198
|
+
await channel.assertQueue(queue, { durable: true });
|
|
199
|
+
channel.prefetch(1);
|
|
200
|
+
|
|
201
|
+
console.log('Waiting for messages...');
|
|
202
|
+
|
|
203
|
+
channel.consume(queue, (msg) => {
|
|
204
|
+
console.log(`Received: ${msg.content.toString()}`);
|
|
205
|
+
// Acknowledge message
|
|
206
|
+
channel.ack(msg);
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
consumeMessages().catch(console.error);
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Python Example
|
|
214
|
+
|
|
215
|
+
Install the AMQP library:
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
pip install pika
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
**Publisher (publisher.py):**
|
|
222
|
+
|
|
223
|
+
```python
|
|
224
|
+
import pika
|
|
225
|
+
|
|
226
|
+
# Connect to RabbitMQ
|
|
227
|
+
connection = pika.BlockingConnection(
|
|
228
|
+
pika.ConnectionParameters(host='rabbitmq', credentials=pika.PlainCredentials('guest', 'guest'))
|
|
229
|
+
)
|
|
230
|
+
channel = connection.channel()
|
|
231
|
+
|
|
232
|
+
# Declare queue
|
|
233
|
+
channel.queue_declare(queue='task_queue', durable=True)
|
|
234
|
+
|
|
235
|
+
# Publish message
|
|
236
|
+
message = 'Hello RabbitMQ!'
|
|
237
|
+
channel.basic_publish(
|
|
238
|
+
exchange='',
|
|
239
|
+
routing_key='task_queue',
|
|
240
|
+
body=message,
|
|
241
|
+
properties=pika.BasicProperties(delivery_mode=2) # Make message persistent
|
|
242
|
+
)
|
|
243
|
+
|
|
244
|
+
print(f"Sent: {message}")
|
|
245
|
+
connection.close()
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
**Consumer (consumer.py):**
|
|
249
|
+
|
|
250
|
+
```python
|
|
251
|
+
import pika
|
|
252
|
+
|
|
253
|
+
def callback(ch, method, properties, body):
|
|
254
|
+
print(f"Received: {body.decode()}")
|
|
255
|
+
ch.basic_ack(delivery_tag=method.delivery_tag)
|
|
256
|
+
|
|
257
|
+
# Connect to RabbitMQ
|
|
258
|
+
connection = pika.BlockingConnection(
|
|
259
|
+
pika.ConnectionParameters(host='rabbitmq', credentials=pika.PlainCredentials('guest', 'guest'))
|
|
260
|
+
)
|
|
261
|
+
channel = connection.channel()
|
|
262
|
+
|
|
263
|
+
# Declare queue
|
|
264
|
+
channel.queue_declare(queue='task_queue', durable=True)
|
|
265
|
+
channel.basic_qos(prefetch_count=1)
|
|
266
|
+
|
|
267
|
+
# Start consuming
|
|
268
|
+
print('Waiting for messages...')
|
|
269
|
+
channel.basic_consume(queue='task_queue', on_message_callback=callback)
|
|
270
|
+
channel.start_consuming()
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### .NET Example
|
|
274
|
+
|
|
275
|
+
Install the RabbitMQ client:
|
|
276
|
+
|
|
277
|
+
```bash
|
|
278
|
+
dotnet add package RabbitMQ.Client
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
**Publisher (Publisher.cs):**
|
|
282
|
+
|
|
283
|
+
```csharp
|
|
284
|
+
using RabbitMQ.Client;
|
|
285
|
+
using System.Text;
|
|
286
|
+
|
|
287
|
+
var factory = new ConnectionFactory
|
|
288
|
+
{
|
|
289
|
+
HostName = "rabbitmq",
|
|
290
|
+
UserName = "guest",
|
|
291
|
+
Password = "guest"
|
|
292
|
+
};
|
|
293
|
+
|
|
294
|
+
using var connection = factory.CreateConnection();
|
|
295
|
+
using var channel = connection.CreateModel();
|
|
296
|
+
|
|
297
|
+
channel.QueueDeclare(
|
|
298
|
+
queue: "task_queue",
|
|
299
|
+
durable: true,
|
|
300
|
+
exclusive: false,
|
|
301
|
+
autoDelete: false,
|
|
302
|
+
arguments: null
|
|
303
|
+
);
|
|
304
|
+
|
|
305
|
+
var message = "Hello RabbitMQ!";
|
|
306
|
+
var body = Encoding.UTF8.GetBytes(message);
|
|
307
|
+
|
|
308
|
+
var properties = channel.CreateBasicProperties();
|
|
309
|
+
properties.Persistent = true;
|
|
310
|
+
|
|
311
|
+
channel.BasicPublish(
|
|
312
|
+
exchange: "",
|
|
313
|
+
routingKey: "task_queue",
|
|
314
|
+
basicProperties: properties,
|
|
315
|
+
body: body
|
|
316
|
+
);
|
|
317
|
+
|
|
318
|
+
Console.WriteLine($"Sent: {message}");
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
**Consumer (Consumer.cs):**
|
|
322
|
+
|
|
323
|
+
```csharp
|
|
324
|
+
using RabbitMQ.Client;
|
|
325
|
+
using RabbitMQ.Client.Events;
|
|
326
|
+
using System.Text;
|
|
327
|
+
|
|
328
|
+
var factory = new ConnectionFactory
|
|
329
|
+
{
|
|
330
|
+
HostName = "rabbitmq",
|
|
331
|
+
UserName = "guest",
|
|
332
|
+
Password = "guest"
|
|
333
|
+
};
|
|
334
|
+
|
|
335
|
+
using var connection = factory.CreateConnection();
|
|
336
|
+
using var channel = connection.CreateModel();
|
|
337
|
+
|
|
338
|
+
channel.QueueDeclare(
|
|
339
|
+
queue: "task_queue",
|
|
340
|
+
durable: true,
|
|
341
|
+
exclusive: false,
|
|
342
|
+
autoDelete: false,
|
|
343
|
+
arguments: null
|
|
344
|
+
);
|
|
345
|
+
|
|
346
|
+
channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);
|
|
347
|
+
|
|
348
|
+
Console.WriteLine("Waiting for messages...");
|
|
349
|
+
|
|
350
|
+
var consumer = new EventingBasicConsumer(channel);
|
|
351
|
+
consumer.Received += (model, ea) =>
|
|
352
|
+
{
|
|
353
|
+
var body = ea.Body.ToArray();
|
|
354
|
+
var message = Encoding.UTF8.GetString(body);
|
|
355
|
+
Console.WriteLine($"Received: {message}");
|
|
356
|
+
|
|
357
|
+
channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false);
|
|
358
|
+
};
|
|
359
|
+
|
|
360
|
+
channel.BasicConsume(queue: "task_queue", autoAck: false, consumer: consumer);
|
|
361
|
+
|
|
362
|
+
Console.WriteLine("Press [enter] to exit.");
|
|
363
|
+
Console.ReadLine();
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
### Go Example
|
|
367
|
+
|
|
368
|
+
Install the AMQP library:
|
|
369
|
+
|
|
370
|
+
```bash
|
|
371
|
+
go get github.com/rabbitmq/amqp091-go
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
**Publisher (publisher.go):**
|
|
375
|
+
|
|
376
|
+
```go
|
|
377
|
+
package main
|
|
378
|
+
|
|
379
|
+
import (
|
|
380
|
+
"context"
|
|
381
|
+
"log"
|
|
382
|
+
"time"
|
|
383
|
+
|
|
384
|
+
amqp "github.com/rabbitmq/amqp091-go"
|
|
385
|
+
)
|
|
386
|
+
|
|
387
|
+
func main() {
|
|
388
|
+
conn, err := amqp.Dial("amqp://guest:guest@rabbitmq:5672/")
|
|
389
|
+
if err != nil {
|
|
390
|
+
log.Fatal(err)
|
|
391
|
+
}
|
|
392
|
+
defer conn.Close()
|
|
393
|
+
|
|
394
|
+
ch, err := conn.Channel()
|
|
395
|
+
if err != nil {
|
|
396
|
+
log.Fatal(err)
|
|
397
|
+
}
|
|
398
|
+
defer ch.Close()
|
|
399
|
+
|
|
400
|
+
q, err := ch.QueueDeclare(
|
|
401
|
+
"task_queue", // name
|
|
402
|
+
true, // durable
|
|
403
|
+
false, // delete when unused
|
|
404
|
+
false, // exclusive
|
|
405
|
+
false, // no-wait
|
|
406
|
+
nil, // arguments
|
|
407
|
+
)
|
|
408
|
+
if err != nil {
|
|
409
|
+
log.Fatal(err)
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
|
413
|
+
defer cancel()
|
|
414
|
+
|
|
415
|
+
body := "Hello RabbitMQ!"
|
|
416
|
+
err = ch.PublishWithContext(ctx,
|
|
417
|
+
"", // exchange
|
|
418
|
+
q.Name, // routing key
|
|
419
|
+
false, // mandatory
|
|
420
|
+
false, // immediate
|
|
421
|
+
amqp.Publishing{
|
|
422
|
+
DeliveryMode: amqp.Persistent,
|
|
423
|
+
ContentType: "text/plain",
|
|
424
|
+
Body: []byte(body),
|
|
425
|
+
})
|
|
426
|
+
if err != nil {
|
|
427
|
+
log.Fatal(err)
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
log.Printf("Sent: %s", body)
|
|
431
|
+
}
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
**Consumer (consumer.go):**
|
|
435
|
+
|
|
436
|
+
```go
|
|
437
|
+
package main
|
|
438
|
+
|
|
439
|
+
import (
|
|
440
|
+
"log"
|
|
441
|
+
|
|
442
|
+
amqp "github.com/rabbitmq/amqp091-go"
|
|
443
|
+
)
|
|
444
|
+
|
|
445
|
+
func main() {
|
|
446
|
+
conn, err := amqp.Dial("amqp://guest:guest@rabbitmq:5672/")
|
|
447
|
+
if err != nil {
|
|
448
|
+
log.Fatal(err)
|
|
449
|
+
}
|
|
450
|
+
defer conn.Close()
|
|
451
|
+
|
|
452
|
+
ch, err := conn.Channel()
|
|
453
|
+
if err != nil {
|
|
454
|
+
log.Fatal(err)
|
|
455
|
+
}
|
|
456
|
+
defer ch.Close()
|
|
457
|
+
|
|
458
|
+
q, err := ch.QueueDeclare(
|
|
459
|
+
"task_queue", // name
|
|
460
|
+
true, // durable
|
|
461
|
+
false, // delete when unused
|
|
462
|
+
false, // exclusive
|
|
463
|
+
false, // no-wait
|
|
464
|
+
nil, // arguments
|
|
465
|
+
)
|
|
466
|
+
if err != nil {
|
|
467
|
+
log.Fatal(err)
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
err = ch.Qos(
|
|
471
|
+
1, // prefetch count
|
|
472
|
+
0, // prefetch size
|
|
473
|
+
false, // global
|
|
474
|
+
)
|
|
475
|
+
if err != nil {
|
|
476
|
+
log.Fatal(err)
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
msgs, err := ch.Consume(
|
|
480
|
+
q.Name, // queue
|
|
481
|
+
"", // consumer
|
|
482
|
+
false, // auto-ack
|
|
483
|
+
false, // exclusive
|
|
484
|
+
false, // no-local
|
|
485
|
+
false, // no-wait
|
|
486
|
+
nil, // args
|
|
487
|
+
)
|
|
488
|
+
if err != nil {
|
|
489
|
+
log.Fatal(err)
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
log.Println("Waiting for messages...")
|
|
493
|
+
|
|
494
|
+
forever := make(chan bool)
|
|
495
|
+
|
|
496
|
+
go func() {
|
|
497
|
+
for d := range msgs {
|
|
498
|
+
log.Printf("Received: %s", d.Body)
|
|
499
|
+
d.Ack(false)
|
|
500
|
+
}
|
|
501
|
+
}()
|
|
502
|
+
|
|
503
|
+
<-forever
|
|
504
|
+
}
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
## Use Cases
|
|
508
|
+
|
|
509
|
+
- **Task Queues** - Distribute time-consuming tasks across multiple workers
|
|
510
|
+
- **Pub/Sub Messaging** - Broadcast messages to multiple consumers
|
|
511
|
+
- **Microservices Communication** - Decouple services with asynchronous messaging
|
|
512
|
+
- **Work Distribution** - Load balancing across worker processes
|
|
513
|
+
- **Event-Driven Architecture** - React to events across service boundaries
|
|
514
|
+
- **Request/Reply Patterns** - RPC-style communication with message queuing
|
|
515
|
+
- **Message Routing** - Complex routing with exchanges and bindings
|
|
516
|
+
|
|
517
|
+
**Integrates well with:**
|
|
518
|
+
|
|
519
|
+
- Language overlays (Node.js, Python, .NET, Go, Java) for client applications
|
|
520
|
+
- Observability stack (OTEL Collector, Prometheus) for message tracing and metrics
|
|
521
|
+
- Microservice architectures with multiple language overlays
|
|
522
|
+
|
|
523
|
+
## Messaging Patterns
|
|
524
|
+
|
|
525
|
+
### Work Queue Pattern
|
|
526
|
+
|
|
527
|
+
```
|
|
528
|
+
Publisher → Queue → Worker1
|
|
529
|
+
→ Worker2
|
|
530
|
+
→ Worker3
|
|
531
|
+
```
|
|
532
|
+
|
|
533
|
+
Multiple workers compete for tasks from a single queue.
|
|
534
|
+
|
|
535
|
+
### Publish/Subscribe Pattern
|
|
536
|
+
|
|
537
|
+
```
|
|
538
|
+
Publisher → Fanout Exchange → Queue1 → Consumer1
|
|
539
|
+
→ Queue2 → Consumer2
|
|
540
|
+
→ Queue3 → Consumer3
|
|
541
|
+
```
|
|
542
|
+
|
|
543
|
+
All subscribers receive every message.
|
|
544
|
+
|
|
545
|
+
### Routing Pattern
|
|
546
|
+
|
|
547
|
+
```
|
|
548
|
+
Publisher → Direct Exchange → Queue1 (info) → Consumer1
|
|
549
|
+
→ Queue2 (error) → Consumer2
|
|
550
|
+
```
|
|
551
|
+
|
|
552
|
+
Messages are routed based on routing keys.
|
|
553
|
+
|
|
554
|
+
### Topics Pattern
|
|
555
|
+
|
|
556
|
+
```
|
|
557
|
+
Publisher → Topic Exchange → Queue1 (*.critical) → Consumer1
|
|
558
|
+
→ Queue2 (kern.*) → Consumer2
|
|
559
|
+
```
|
|
560
|
+
|
|
561
|
+
Pattern-based routing with wildcards.
|
|
562
|
+
|
|
563
|
+
## Troubleshooting
|
|
564
|
+
|
|
565
|
+
### Service Not Starting
|
|
566
|
+
|
|
567
|
+
**Check logs:**
|
|
568
|
+
|
|
569
|
+
```bash
|
|
570
|
+
docker logs rabbitmq
|
|
571
|
+
```
|
|
572
|
+
|
|
573
|
+
**Common issues:**
|
|
574
|
+
|
|
575
|
+
- Port conflicts (5672 or 15672 already in use)
|
|
576
|
+
- Insufficient memory
|
|
577
|
+
- Volume permission issues
|
|
578
|
+
|
|
579
|
+
### Cannot Connect to RabbitMQ
|
|
580
|
+
|
|
581
|
+
**Verify service is running:**
|
|
582
|
+
|
|
583
|
+
```bash
|
|
584
|
+
docker ps | grep rabbitmq
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
**Check network connectivity:**
|
|
588
|
+
|
|
589
|
+
```bash
|
|
590
|
+
# From dev container
|
|
591
|
+
curl -u guest:guest http://rabbitmq:15672/api/overview
|
|
592
|
+
```
|
|
593
|
+
|
|
594
|
+
**Verify credentials:**
|
|
595
|
+
Check `.env` file for correct username/password
|
|
596
|
+
|
|
597
|
+
### Management UI Not Accessible
|
|
598
|
+
|
|
599
|
+
**Ensure management plugin is enabled:**
|
|
600
|
+
The `rabbitmq:3-management-alpine` image includes the management plugin by default.
|
|
601
|
+
|
|
602
|
+
**Check port forwarding:**
|
|
603
|
+
Verify port 15672 is forwarded in your devcontainer configuration.
|
|
604
|
+
|
|
605
|
+
### Messages Not Being Consumed
|
|
606
|
+
|
|
607
|
+
**Check consumer connection:**
|
|
608
|
+
|
|
609
|
+
- Verify queue name matches exactly
|
|
610
|
+
- Ensure consumer is acknowledging messages
|
|
611
|
+
- Check prefetch count settings
|
|
612
|
+
|
|
613
|
+
**Inspect queue in Management UI:**
|
|
614
|
+
|
|
615
|
+
- View message rates
|
|
616
|
+
- Check consumer count
|
|
617
|
+
- Review message status (ready, unacked)
|
|
618
|
+
|
|
619
|
+
## Security Considerations
|
|
620
|
+
|
|
621
|
+
⚠️ **Default Configuration Warning:**
|
|
622
|
+
|
|
623
|
+
- Default credentials (guest/guest) are for development only
|
|
624
|
+
- Guest user can only connect from localhost by default
|
|
625
|
+
- Change credentials for production environments
|
|
626
|
+
|
|
627
|
+
**Best Practices:**
|
|
628
|
+
|
|
629
|
+
- Use strong passwords in production
|
|
630
|
+
- Create separate users with limited permissions
|
|
631
|
+
- Enable TLS for production deployments
|
|
632
|
+
- Use virtual hosts to isolate applications
|
|
633
|
+
- Regularly rotate credentials
|
|
634
|
+
- Monitor failed authentication attempts
|
|
635
|
+
|
|
636
|
+
**Creating a new user:**
|
|
637
|
+
|
|
638
|
+
```bash
|
|
639
|
+
# Create user
|
|
640
|
+
docker exec rabbitmq rabbitmqctl add_user myuser mypassword
|
|
641
|
+
|
|
642
|
+
# Set permissions
|
|
643
|
+
docker exec rabbitmq rabbitmqctl set_permissions -p / myuser ".*" ".*" ".*"
|
|
644
|
+
|
|
645
|
+
# Set user tags (optional)
|
|
646
|
+
docker exec rabbitmq rabbitmqctl set_user_tags myuser administrator
|
|
647
|
+
```
|
|
648
|
+
|
|
649
|
+
## Related Overlays
|
|
650
|
+
|
|
651
|
+
**Alternative Messaging Systems:**
|
|
652
|
+
|
|
653
|
+
- `redpanda` - Kafka-compatible event streaming (better for high-throughput logs)
|
|
654
|
+
- `nats` - Lightweight pub/sub messaging (faster but fewer features)
|
|
655
|
+
|
|
656
|
+
**Complementary Overlays:**
|
|
657
|
+
|
|
658
|
+
- Language overlays - Application development with AMQP clients
|
|
659
|
+
- `otel-collector` - Distributed tracing of message flows
|
|
660
|
+
- `prometheus` - Metrics collection from RabbitMQ
|
|
661
|
+
- `grafana` - Visualization of message queue metrics
|
|
662
|
+
|
|
663
|
+
## Additional Resources
|
|
664
|
+
|
|
665
|
+
- [Official RabbitMQ Documentation](https://www.rabbitmq.com/documentation.html)
|
|
666
|
+
- [RabbitMQ Tutorials](https://www.rabbitmq.com/getstarted.html)
|
|
667
|
+
- [AMQP Protocol](https://www.rabbitmq.com/tutorials/amqp-concepts.html)
|
|
668
|
+
- [RabbitMQ Management HTTP API](https://www.rabbitmq.com/management.html)
|
|
669
|
+
- [Client Libraries](https://www.rabbitmq.com/devtools.html)
|
|
670
|
+
|
|
671
|
+
## Notes
|
|
672
|
+
|
|
673
|
+
- RabbitMQ uses the AMQP 0-9-1 protocol
|
|
674
|
+
- Supports multiple messaging patterns (queues, exchanges, bindings)
|
|
675
|
+
- Messages can be persistent or transient
|
|
676
|
+
- Provides message acknowledgments and publisher confirms
|
|
677
|
+
- Built-in clustering and high availability features
|
|
678
|
+
- Management UI accessible at port 15672
|
|
679
|
+
- Default virtual host is `/`
|
|
680
|
+
- Maximum message size is 128 MB by default
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
|
|
3
|
+
"features": {
|
|
4
|
+
"./features/cross-distro-packages": {
|
|
5
|
+
"apt": "curl",
|
|
6
|
+
"apk": "curl"
|
|
7
|
+
}
|
|
8
|
+
},
|
|
9
|
+
"runServices": ["rabbitmq"],
|
|
10
|
+
"forwardPorts": [5672, 15672],
|
|
11
|
+
"portsAttributes": {
|
|
12
|
+
"5672": {
|
|
13
|
+
"label": "RabbitMQ AMQP",
|
|
14
|
+
"onAutoForward": "notify"
|
|
15
|
+
},
|
|
16
|
+
"15672": {
|
|
17
|
+
"label": "RabbitMQ Management UI",
|
|
18
|
+
"onAutoForward": "openBrowser"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"remoteEnv": {
|
|
22
|
+
"RABBITMQ_HOST": "rabbitmq",
|
|
23
|
+
"RABBITMQ_PORT": "5672",
|
|
24
|
+
"RABBITMQ_MANAGEMENT_PORT": "15672",
|
|
25
|
+
"RABBITMQ_USER": "guest",
|
|
26
|
+
"RABBITMQ_PASSWORD": "guest"
|
|
27
|
+
}
|
|
28
|
+
}
|