A Blazor Server tool to explore and manage Azure Service Bus namespaces.
Connections are stored locally in App_Data/connections.json so you can run it anywhere without a database. Docker is the easiest way to get started.
This tool was built with AI-assisted code while experimenting with AI code assistants.
I found it to be a useful technique to get a quick dev tool up and running, so I don't apologize! 😂
With that in mind, feel free to suggest / make improvements - i'm not particularly precious about the code.
- Browse queues, topics and subscriptions in a simple tree.
- Peek active and dead-letter messages with paging and optional live refresh.
- View message details and resubmit from DLQ; optionally remove the original from DLQ.
- Send to queues or topics with custom properties, content type, and scheduling; send multiple with an interval.
- Manage subscriptions and rules (SQL and correlation) with create/delete.
- Edit entity defaults (TTL and dead-letter on expiration) for queues, topics, subscriptions.
- Pinned connections and quick search for large lists.
- Data persisted to JSON; no external database required.
Run the container and persist connection data in a named volume:
# optional: create the volume (auto-created on first run)
docker volume create vibes-asb-manager-data
docker run -d \
--pull always \
--name vibes-asb-manager \
-p 9000:8080 \
-v vibes-asb-manager-data:/app/App_Data \
-e ASPNETCORE_ENVIRONMENT=Development \
anilkerai/vibes-asb-manager-web:latest
# open http://localhost:9000Pin to a specific version:
docker run -d \
--name vibes-asb-manager \
-p 9000:8080 \
-v vibes-asb-manager-data:/app/App_Data \
anilkerai/vibes-asb-manager-web:1.2.3Upgrade later by pulling a new tag and recreating the container. Reset data by removing the named volume if needed.
Create a minimal docker-compose.yml locally and start the app:
version: "3.9"
services:
web:
image: anilkerai/vibes-asb-manager-web:latest
pull_policy: always
environment:
ASPNETCORE_ENVIRONMENT: Development
ASPNETCORE_URLS: http://+:8080
ports:
- "9000:8080"
volumes:
- appdata:/app/App_Data
volumes:
appdata:Then run:
docker compose up -dThis starts the Web app and persists App_Data via a volume — no source required.
This repo includes a GitHub Actions workflow at .github/workflows/docker.yml that builds multi-arch images and publishes to Docker Hub.
Set the following GitHub repository secrets:
DOCKERHUB_USERNAME— your Docker Hub username (e.g.,anilkerai).DOCKERHUB_TOKEN— a Docker Hub Access Token for that account.
- Builds the Web app image using
src/Vibes.ASBManager.Web/Dockerfile. - Targets multi-arch:
linux/amd64, linux/arm64. - Publishes to
anilkerai/vibes-asb-manager-webwith tags:- On pushes to
main:mainand a short SHA tag (sha-xxxxxxx). - On tags like
v1.2.3:1.2.3,1.2, andlatest. - Manual runs via
workflow_dispatchare supported.
- On pushes to
- Merge to
mainor create a Git tag:git tag v1.2.3 && git push origin v1.2.3 - The workflow will build and push multi-arch images.
- Update your Compose file to pin to that version (recommended):
web: image: anilkerai/vibes-asb-manager-web:1.4.4 pull_policy: always
Pinning a version ensures reproducible environments. Use :latest for always-up-to-date dev environments.
src/Vibes.ASBManager.Web/— Blazor Server appsrc/Vibes.ASBManager.Application/— app interfaces and contractssrc/Vibes.ASBManager.Infrastructure.AzureServiceBus/— Service Bus implementationssrc/Vibes.ASBManager.Infrastructure.Storage.File/— File connection store implementationssrc/Vibes.ASBManager.Domain/— domain models (e.g.,ConnectionInfowithPinned)src/Vibes.ASBManager.ServiceDefaults/— shared service defaults (OpenTelemetry, health checks)tests/Vibes.ASBManager.Tests.Unit/— unit tests for valuable code
When running in Development environment, the Web app maps:
- Readiness:
GET /health - Liveness:
GET /alive(checks tagged aslive)
These are mainly for local diagnostics and Compose orchestration.
- App_Data not writable:
- Ensure the running user has write permission to
App_Data. In Docker, a named volume is mounted at/app/App_Data.
- Ensure the running user has write permission to
- Port already in use:
- Change the exposed port in
docker-compose.ymlor setASPNETCORE_URLSwhen running locally.
- Change the exposed port in
- Docker Desktop issues:
- Ensure it is running and has sufficient resources/disk space.
Two convenience scripts are provided in scripts/ to run the Web app in Docker with sensible defaults and a persistent volume for App_Data.
Scripts:
scripts/run-docker-mac.sh— macOS/Linux (Bash)scripts/run-docker-win.ps1— Windows (PowerShell)
What they do:
- Create the named volume if it doesn’t exist (default:
vibes-asb-manager-data). - Remove any existing container with the same name (default:
vibes-asb-manager). - Run
anilkerai/vibes-asb-manager-webmapping host port to container8080and persisting/app/App_Data.
Environment variables / parameters:
- Image/tag:
WEB_IMAGE(Bash) /-Image(PowerShell). Default:anilkerai/vibes-asb-manager-web:latest. - Volume name:
VOLUME_NAME/-VolumeName. Default:vibes-asb-manager-data. - Container name:
CONTAINER_NAME/-ContainerName. Default:vibes-asb-manager. - Host port:
PORT/-Port. Default:9000.
- Make the script executable (first time only):
chmod 700 scripts/run-docker-mac.sh- Run with defaults:
./scripts/run-docker-mac.sh- Override defaults via environment variables (optional):
WEB_IMAGE=anilkerai/vibes-asb-manager-web:latest \
VOLUME_NAME=vibes-asb-manager-data \
CONTAINER_NAME=vibes-asb-manager \
PORT=9000 \
./scripts/run-docker-mac.shThen open http://localhost:9000 (or the port you chose).
Run with defaults:
./scripts/run-docker-win.ps1Override with parameters:
./scripts/run-docker-win.ps1 -Image anilkerai/vibes-asb-manager-web:latest -VolumeName vibes-asb-manager-data -ContainerName vibes-asb-manager -Port 9000Or use environment variables:
$env:WEB_IMAGE='anilkerai/vibes-asb-manager-web:latest'
$env:VOLUME_NAME='vibes-asb-manager-data'
$env:CONTAINER_NAME='vibes-asb-manager'
$env:PORT=9000
./scripts/run-docker-win.ps1If your PowerShell execution policy blocks the script, you can temporarily allow it for the current session:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass- Stop and remove the running container:
docker stop vibes-asb-manager && docker rm vibes-asb-manager- Tail logs:
docker logs -f vibes-asb-manager