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.
Files changed (327) hide show
  1. package/README.md +843 -0
  2. package/dist/scripts/init.d.ts +3 -0
  3. package/dist/scripts/init.d.ts.map +1 -0
  4. package/dist/scripts/init.js +1190 -0
  5. package/dist/scripts/init.js.map +1 -0
  6. package/dist/scripts/migrate-to-manifests.d.ts +12 -0
  7. package/dist/scripts/migrate-to-manifests.d.ts.map +1 -0
  8. package/dist/scripts/migrate-to-manifests.js +230 -0
  9. package/dist/scripts/migrate-to-manifests.js.map +1 -0
  10. package/dist/tool/questionnaire/composer.d.ts +6 -0
  11. package/dist/tool/questionnaire/composer.d.ts.map +1 -0
  12. package/dist/tool/questionnaire/composer.js +1232 -0
  13. package/dist/tool/questionnaire/composer.js.map +1 -0
  14. package/dist/tool/readme/markdown-parser.d.ts +30 -0
  15. package/dist/tool/readme/markdown-parser.d.ts.map +1 -0
  16. package/dist/tool/readme/markdown-parser.js +139 -0
  17. package/dist/tool/readme/markdown-parser.js.map +1 -0
  18. package/dist/tool/readme/readme-generator.d.ts +9 -0
  19. package/dist/tool/readme/readme-generator.d.ts.map +1 -0
  20. package/dist/tool/readme/readme-generator.js +422 -0
  21. package/dist/tool/readme/readme-generator.js.map +1 -0
  22. package/dist/tool/schema/custom-loader.d.ts +17 -0
  23. package/dist/tool/schema/custom-loader.d.ts.map +1 -0
  24. package/dist/tool/schema/custom-loader.js +149 -0
  25. package/dist/tool/schema/custom-loader.js.map +1 -0
  26. package/dist/tool/schema/overlay-loader.d.ts +47 -0
  27. package/dist/tool/schema/overlay-loader.d.ts.map +1 -0
  28. package/dist/tool/schema/overlay-loader.js +252 -0
  29. package/dist/tool/schema/overlay-loader.js.map +1 -0
  30. package/dist/tool/schema/types.d.ts +212 -0
  31. package/dist/tool/schema/types.d.ts.map +1 -0
  32. package/dist/tool/schema/types.js +5 -0
  33. package/dist/tool/schema/types.js.map +1 -0
  34. package/docs/README.md +308 -0
  35. package/docs/architecture.md +233 -0
  36. package/docs/creating-overlays.md +549 -0
  37. package/docs/custom-patches.md +540 -0
  38. package/docs/dependencies.md +279 -0
  39. package/docs/examples/custom-patches-example.md +85 -0
  40. package/docs/examples.md +576 -0
  41. package/docs/messaging-comparison.md +265 -0
  42. package/docs/messaging-quick-start.md +385 -0
  43. package/docs/observability-workflow.md +537 -0
  44. package/docs/overlay-manifest-refactoring.md +214 -0
  45. package/docs/overlay-metadata-archive.md +54 -0
  46. package/docs/overlays.md +523 -0
  47. package/docs/presets-architecture.md +498 -0
  48. package/docs/presets.md +366 -0
  49. package/docs/publishing.md +476 -0
  50. package/docs/quick-reference.md +326 -0
  51. package/docs/ux.md +170 -0
  52. package/features/README.md +85 -0
  53. package/features/cross-distro-packages/README.md +146 -0
  54. package/features/cross-distro-packages/devcontainer-feature.json +20 -0
  55. package/features/cross-distro-packages/install.sh +58 -0
  56. package/features/local-secrets-manager/devcontainer-feature.json +18 -0
  57. package/features/local-secrets-manager/install.sh +127 -0
  58. package/features/project-scaffolder/devcontainer-feature.json +24 -0
  59. package/features/project-scaffolder/install.sh +100 -0
  60. package/features/team-conventions/devcontainer-feature.json +24 -0
  61. package/features/team-conventions/install.sh +93 -0
  62. package/overlays/.registry/README.md +14 -0
  63. package/overlays/.registry/base-images.yml +26 -0
  64. package/overlays/.registry/base-templates.yml +7 -0
  65. package/overlays/README.md +155 -0
  66. package/overlays/alertmanager/.env.example +5 -0
  67. package/overlays/alertmanager/README.md +465 -0
  68. package/overlays/alertmanager/alert-rules.yml +56 -0
  69. package/overlays/alertmanager/alertmanager.yml +42 -0
  70. package/overlays/alertmanager/devcontainer.patch.json +12 -0
  71. package/overlays/alertmanager/docker-compose.yml +20 -0
  72. package/overlays/alertmanager/overlay.yml +17 -0
  73. package/overlays/alertmanager/setup.sh +53 -0
  74. package/overlays/alertmanager/verify.sh +31 -0
  75. package/overlays/aws-cli/README.md +473 -0
  76. package/overlays/aws-cli/devcontainer.patch.json +13 -0
  77. package/overlays/aws-cli/overlay.yml +13 -0
  78. package/overlays/azure-cli/README.md +551 -0
  79. package/overlays/azure-cli/devcontainer.patch.json +8 -0
  80. package/overlays/azure-cli/overlay.yml +13 -0
  81. package/overlays/bun/README.md +312 -0
  82. package/overlays/bun/devcontainer.patch.json +41 -0
  83. package/overlays/bun/overlay.yml +16 -0
  84. package/overlays/bun/setup.sh +79 -0
  85. package/overlays/bun/verify.sh +30 -0
  86. package/overlays/codex/README.md +128 -0
  87. package/overlays/codex/devcontainer.patch.json +3 -0
  88. package/overlays/codex/overlay.yml +14 -0
  89. package/overlays/codex/setup.sh +24 -0
  90. package/overlays/codex/verify.sh +30 -0
  91. package/overlays/commitlint/README.md +333 -0
  92. package/overlays/commitlint/devcontainer.patch.json +8 -0
  93. package/overlays/commitlint/overlay.yml +16 -0
  94. package/overlays/commitlint/setup.sh +234 -0
  95. package/overlays/direnv/README.md +504 -0
  96. package/overlays/direnv/devcontainer.patch.json +6 -0
  97. package/overlays/direnv/overlay.yml +13 -0
  98. package/overlays/direnv/setup.sh +139 -0
  99. package/overlays/docker-in-docker/README.md +534 -0
  100. package/overlays/docker-in-docker/devcontainer.patch.json +10 -0
  101. package/overlays/docker-in-docker/overlay.yml +13 -0
  102. package/overlays/docker-sock/README.md +256 -0
  103. package/overlays/docker-sock/devcontainer.patch.json +9 -0
  104. package/overlays/docker-sock/docker-compose.yml +8 -0
  105. package/overlays/docker-sock/overlay.yml +13 -0
  106. package/overlays/dotnet/README.md +147 -0
  107. package/overlays/dotnet/devcontainer.patch.json +51 -0
  108. package/overlays/dotnet/global-tools.txt +24 -0
  109. package/overlays/dotnet/overlay.yml +13 -0
  110. package/overlays/dotnet/setup.sh +51 -0
  111. package/overlays/dotnet/verify.sh +26 -0
  112. package/overlays/gcloud/README.md +269 -0
  113. package/overlays/gcloud/devcontainer.patch.json +14 -0
  114. package/overlays/gcloud/overlay.yml +14 -0
  115. package/overlays/gcloud/verify.sh +52 -0
  116. package/overlays/git-helpers/README.md +168 -0
  117. package/overlays/git-helpers/devcontainer.patch.json +33 -0
  118. package/overlays/git-helpers/overlay.yml +15 -0
  119. package/overlays/git-helpers/setup.sh +91 -0
  120. package/overlays/go/README.md +293 -0
  121. package/overlays/go/devcontainer.patch.json +43 -0
  122. package/overlays/go/overlay.yml +15 -0
  123. package/overlays/go/setup.sh +33 -0
  124. package/overlays/go/verify.sh +40 -0
  125. package/overlays/grafana/.env.example +9 -0
  126. package/overlays/grafana/README.md +462 -0
  127. package/overlays/grafana/dashboard-provider.yml +11 -0
  128. package/overlays/grafana/dashboards/observability-overview.json +263 -0
  129. package/overlays/grafana/devcontainer.patch.json +12 -0
  130. package/overlays/grafana/docker-compose.yml +27 -0
  131. package/overlays/grafana/grafana-datasources.yml +57 -0
  132. package/overlays/grafana/overlay.yml +21 -0
  133. package/overlays/grafana/verify.sh +34 -0
  134. package/overlays/jaeger/.env.example +7 -0
  135. package/overlays/jaeger/README.md +867 -0
  136. package/overlays/jaeger/devcontainer.patch.json +12 -0
  137. package/overlays/jaeger/docker-compose.yml +17 -0
  138. package/overlays/jaeger/overlay.yml +19 -0
  139. package/overlays/java/README.md +267 -0
  140. package/overlays/java/devcontainer.patch.json +44 -0
  141. package/overlays/java/overlay.yml +16 -0
  142. package/overlays/java/setup.sh +41 -0
  143. package/overlays/java/verify.sh +42 -0
  144. package/overlays/just/README.md +443 -0
  145. package/overlays/just/devcontainer.patch.json +3 -0
  146. package/overlays/just/overlay.yml +13 -0
  147. package/overlays/just/setup.sh +182 -0
  148. package/overlays/kubectl-helm/README.md +660 -0
  149. package/overlays/kubectl-helm/devcontainer.patch.json +10 -0
  150. package/overlays/kubectl-helm/overlay.yml +13 -0
  151. package/overlays/loki/.env.example +5 -0
  152. package/overlays/loki/README.md +1156 -0
  153. package/overlays/loki/devcontainer.patch.json +12 -0
  154. package/overlays/loki/docker-compose.yml +18 -0
  155. package/overlays/loki/loki-config.yaml +45 -0
  156. package/overlays/loki/overlay.yml +17 -0
  157. package/overlays/minio/.env.example +9 -0
  158. package/overlays/minio/README.md +639 -0
  159. package/overlays/minio/devcontainer.patch.json +30 -0
  160. package/overlays/minio/docker-compose.yml +28 -0
  161. package/overlays/minio/overlay.yml +18 -0
  162. package/overlays/minio/setup.sh +61 -0
  163. package/overlays/minio/verify.sh +64 -0
  164. package/overlays/mkdocs/README.md +309 -0
  165. package/overlays/mkdocs/devcontainer.patch.json +24 -0
  166. package/overlays/mkdocs/overlay.yml +15 -0
  167. package/overlays/modern-cli-tools/README.md +556 -0
  168. package/overlays/modern-cli-tools/devcontainer.patch.json +3 -0
  169. package/overlays/modern-cli-tools/overlay.yml +13 -0
  170. package/overlays/modern-cli-tools/setup.sh +153 -0
  171. package/overlays/mongodb/.env.example +9 -0
  172. package/overlays/mongodb/README.md +481 -0
  173. package/overlays/mongodb/devcontainer.patch.json +32 -0
  174. package/overlays/mongodb/docker-compose.yml +44 -0
  175. package/overlays/mongodb/overlay.yml +17 -0
  176. package/overlays/mongodb/verify.sh +48 -0
  177. package/overlays/mysql/.env.example +11 -0
  178. package/overlays/mysql/README.md +542 -0
  179. package/overlays/mysql/devcontainer.patch.json +34 -0
  180. package/overlays/mysql/docker-compose.yml +55 -0
  181. package/overlays/mysql/overlay.yml +16 -0
  182. package/overlays/mysql/verify.sh +48 -0
  183. package/overlays/nats/.env.example +5 -0
  184. package/overlays/nats/README.md +762 -0
  185. package/overlays/nats/devcontainer.patch.json +24 -0
  186. package/overlays/nats/docker-compose.yml +31 -0
  187. package/overlays/nats/overlay.yml +18 -0
  188. package/overlays/nats/verify.sh +50 -0
  189. package/overlays/ngrok/README.md +503 -0
  190. package/overlays/ngrok/devcontainer.patch.json +3 -0
  191. package/overlays/ngrok/overlay.yml +14 -0
  192. package/overlays/ngrok/setup.sh +125 -0
  193. package/overlays/nodejs/README.md +192 -0
  194. package/overlays/nodejs/devcontainer.patch.json +49 -0
  195. package/overlays/nodejs/global-packages.txt +16 -0
  196. package/overlays/nodejs/overlay.yml +14 -0
  197. package/overlays/nodejs/setup.sh +46 -0
  198. package/overlays/nodejs/verify.sh +32 -0
  199. package/overlays/otel-collector/.env.example +9 -0
  200. package/overlays/otel-collector/README.md +1257 -0
  201. package/overlays/otel-collector/devcontainer.patch.json +28 -0
  202. package/overlays/otel-collector/docker-compose.yml +22 -0
  203. package/overlays/otel-collector/otel-collector-config.yaml +68 -0
  204. package/overlays/otel-collector/overlay.yml +21 -0
  205. package/overlays/otel-collector/setup.sh +49 -0
  206. package/overlays/otel-demo-nodejs/.env.example +2 -0
  207. package/overlays/otel-demo-nodejs/Dockerfile-otel-demo-nodejs +17 -0
  208. package/overlays/otel-demo-nodejs/README.md +409 -0
  209. package/overlays/otel-demo-nodejs/devcontainer.patch.json +12 -0
  210. package/overlays/otel-demo-nodejs/docker-compose.yml +19 -0
  211. package/overlays/otel-demo-nodejs/overlay.yml +23 -0
  212. package/overlays/otel-demo-nodejs/package-otel-demo-nodejs.json +20 -0
  213. package/overlays/otel-demo-nodejs/server-otel-demo-nodejs.js +259 -0
  214. package/overlays/otel-demo-nodejs/tracing-otel-demo-nodejs.js +57 -0
  215. package/overlays/otel-demo-nodejs/verify.sh +31 -0
  216. package/overlays/otel-demo-python/.env.example +2 -0
  217. package/overlays/otel-demo-python/Dockerfile-otel-demo-python +16 -0
  218. package/overlays/otel-demo-python/README.md +82 -0
  219. package/overlays/otel-demo-python/app-otel-demo-python.py +208 -0
  220. package/overlays/otel-demo-python/devcontainer.patch.json +12 -0
  221. package/overlays/otel-demo-python/docker-compose.yml +19 -0
  222. package/overlays/otel-demo-python/overlay.yml +23 -0
  223. package/overlays/otel-demo-python/requirements-otel-demo-python.txt +4 -0
  224. package/overlays/otel-demo-python/verify.sh +31 -0
  225. package/overlays/playwright/README.md +629 -0
  226. package/overlays/playwright/devcontainer.patch.json +9 -0
  227. package/overlays/playwright/overlay.yml +13 -0
  228. package/overlays/postgres/.env.example +6 -0
  229. package/overlays/postgres/README.md +602 -0
  230. package/overlays/postgres/devcontainer.patch.json +21 -0
  231. package/overlays/postgres/docker-compose.yml +22 -0
  232. package/overlays/postgres/overlay.yml +15 -0
  233. package/overlays/postgres/verify.sh +45 -0
  234. package/overlays/powershell/README.md +314 -0
  235. package/overlays/powershell/devcontainer.patch.json +22 -0
  236. package/overlays/powershell/overlay.yml +13 -0
  237. package/overlays/powershell/setup.sh +29 -0
  238. package/overlays/powershell/verify.sh +38 -0
  239. package/overlays/pre-commit/README.md +263 -0
  240. package/overlays/pre-commit/devcontainer.patch.json +9 -0
  241. package/overlays/pre-commit/overlay.yml +16 -0
  242. package/overlays/pre-commit/setup.sh +129 -0
  243. package/overlays/presets/docs-site.yml +118 -0
  244. package/overlays/presets/fullstack.yml +181 -0
  245. package/overlays/presets/microservice.yml +118 -0
  246. package/overlays/presets/web-api.yml +109 -0
  247. package/overlays/prometheus/.env.example +5 -0
  248. package/overlays/prometheus/README.md +1246 -0
  249. package/overlays/prometheus/devcontainer.patch.json +12 -0
  250. package/overlays/prometheus/docker-compose.yml +22 -0
  251. package/overlays/prometheus/overlay.yml +17 -0
  252. package/overlays/prometheus/prometheus.yml +12 -0
  253. package/overlays/prometheus/verify.sh +34 -0
  254. package/overlays/promtail/.env.example +2 -0
  255. package/overlays/promtail/README.md +357 -0
  256. package/overlays/promtail/devcontainer.patch.json +5 -0
  257. package/overlays/promtail/docker-compose.yml +16 -0
  258. package/overlays/promtail/overlay.yml +17 -0
  259. package/overlays/promtail/promtail-config.yaml +60 -0
  260. package/overlays/promtail/verify.sh +31 -0
  261. package/overlays/pulumi/README.md +472 -0
  262. package/overlays/pulumi/devcontainer.patch.json +13 -0
  263. package/overlays/pulumi/overlay.yml +14 -0
  264. package/overlays/pulumi/verify.sh +31 -0
  265. package/overlays/python/README.md +919 -0
  266. package/overlays/python/devcontainer.patch.json +41 -0
  267. package/overlays/python/overlay.yml +12 -0
  268. package/overlays/python/requirements-overlay.txt +13 -0
  269. package/overlays/python/setup.sh +47 -0
  270. package/overlays/python/verify.sh +32 -0
  271. package/overlays/rabbitmq/.env.example +7 -0
  272. package/overlays/rabbitmq/README.md +680 -0
  273. package/overlays/rabbitmq/devcontainer.patch.json +28 -0
  274. package/overlays/rabbitmq/docker-compose.yml +30 -0
  275. package/overlays/rabbitmq/overlay.yml +18 -0
  276. package/overlays/rabbitmq/verify.sh +41 -0
  277. package/overlays/redis/.env.example +4 -0
  278. package/overlays/redis/README.md +776 -0
  279. package/overlays/redis/devcontainer.patch.json +21 -0
  280. package/overlays/redis/docker-compose.yml +21 -0
  281. package/overlays/redis/overlay.yml +15 -0
  282. package/overlays/redis/verify.sh +41 -0
  283. package/overlays/redpanda/.env.example +10 -0
  284. package/overlays/redpanda/README.md +703 -0
  285. package/overlays/redpanda/devcontainer.patch.json +37 -0
  286. package/overlays/redpanda/docker-compose.yml +67 -0
  287. package/overlays/redpanda/overlay.yml +21 -0
  288. package/overlays/redpanda/verify.sh +48 -0
  289. package/overlays/rust/README.md +299 -0
  290. package/overlays/rust/devcontainer.patch.json +39 -0
  291. package/overlays/rust/overlay.yml +15 -0
  292. package/overlays/rust/setup.sh +36 -0
  293. package/overlays/rust/verify.sh +51 -0
  294. package/overlays/sqlite/README.md +584 -0
  295. package/overlays/sqlite/devcontainer.patch.json +14 -0
  296. package/overlays/sqlite/overlay.yml +15 -0
  297. package/overlays/sqlite/setup.sh +27 -0
  298. package/overlays/sqlite/verify.sh +43 -0
  299. package/overlays/sqlserver/.env.example +6 -0
  300. package/overlays/sqlserver/README.md +592 -0
  301. package/overlays/sqlserver/devcontainer.patch.json +22 -0
  302. package/overlays/sqlserver/docker-compose.yml +32 -0
  303. package/overlays/sqlserver/overlay.yml +17 -0
  304. package/overlays/sqlserver/verify.sh +30 -0
  305. package/overlays/tempo/.env.example +5 -0
  306. package/overlays/tempo/README.md +273 -0
  307. package/overlays/tempo/devcontainer.patch.json +12 -0
  308. package/overlays/tempo/docker-compose.yml +20 -0
  309. package/overlays/tempo/overlay.yml +20 -0
  310. package/overlays/tempo/tempo-config.yaml +32 -0
  311. package/overlays/tempo/verify.sh +31 -0
  312. package/overlays/terraform/README.md +389 -0
  313. package/overlays/terraform/devcontainer.patch.json +15 -0
  314. package/overlays/terraform/overlay.yml +14 -0
  315. package/overlays/terraform/verify.sh +63 -0
  316. package/package.json +74 -0
  317. package/templates/README.md +285 -0
  318. package/templates/compose/.devcontainer/devcontainer.json +46 -0
  319. package/templates/compose/.devcontainer/docker-compose.yml +12 -0
  320. package/templates/compose/README.md +20 -0
  321. package/templates/plain/.devcontainer/devcontainer.json +35 -0
  322. package/templates/plain/README.md +21 -0
  323. package/tool/README.md +281 -0
  324. package/tool/schema/base-images.schema.json +43 -0
  325. package/tool/schema/base-templates.schema.json +34 -0
  326. package/tool/schema/config.schema.json +71 -0
  327. 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
+ }