CloudAPI uses RabbitMQ via MassTransit 8.3.1 for asynchronous messaging. It operates with two RabbitMQ virtual hosts and uses BusProxy for outbound publishing.
Message Bus Architecture
Bus
Purpose
Queue
TELS vHost
Core task events
tels.mqservices.buildingservices.cloudapi
BuildingServices vHost
Building services events
Configured but not actively used
Delivery Mechanism
Component
Purpose
Configuration
BusProxy Client
Outbound message publishing
HTTP-based with 45s timeout
MassTransit
Inbound message consumption
Direct RabbitMQ connection
Consumed Events (Inbound)
CalculatePropensityToWinMessage
Property
Value
Source
BuildingServices.Contracts v1.511.0 (NuGet)
Queue
tels.mqservices.buildingservices.cloudapi
Consumer
TELSPropensityToWinConsumer
Namespace
BuildingServices.Contracts.V1.Events
Trigger
External system or API command
Action
Calls FastAPI ML service for propensity-to-win prediction, stores result in PostgreSQL
Message Wrapper:
- Wrapped in TypedMessage<FlushCacheRequest> generic wrapper
- Published via BusProxy.Client.IPublisher.PublishMessage()
Purpose: Distributed cache invalidation across multiple service instances
Processing Flow:
1. API endpoint receives GET request
2. Controller builds FlushCacheRequest with current machine name
3. Optional cacheDomain query parameter filters cache scope
4. Message published to BusProxy
5. BusProxy distributes to all subscribed services
6. Each service instance flushes its local cache
Message Queue Configuration
RabbitMQ Connection (TELS vHost)
Setting
Source
Description
Host
Environment: RMQTELS__Host
RabbitMQ broker hostname
Username
Environment: RMQTELS__Username
Auth username
Password
Environment: RMQTELS__Password
Auth password
Connection Format
rabbitmq://{Host}
URI scheme
RabbitMQ Connection (BuildingServices vHost)
Setting
Source
Description
Host
Environment: RMQBUILDINGSERVICES__Host
RabbitMQ broker hostname
Username
Environment: RMQBUILDINGSERVICES__Username
Auth username
Password
Environment: RMQBUILDINGSERVICES__Password
Auth password
BusProxy Configuration
Setting
Source
Description
Endpoint
APP__BusProxyServiceEndpoint
BusProxy HTTP service URL
Timeout
45 seconds
HTTP request timeout
Delivery Handler
BusProxy.Client.WebServiceHandler
HTTP-based delivery
Publisher
BusProxy.Client.Publisher
Message publishing interface
Retry Policies
Component
Policy
Description
MassTransit Consumer
Default
No explicit retry configured; uses MassTransit defaults
Behavior:
- Runs continuously in background
- Checks bus connectivity at configured interval
- Logs warnings if unhealthy threshold exceeded
- Used for operational monitoring and alerting
Message Flow Diagrams
Propensity-to-Win Calculation
External System / API
→ Publishes CalculatePropensityToWinMessage
→ RabbitMQ Queue: tels.mqservices.buildingservices.cloudapi
→ TELSPropensityToWinConsumer (MQServices)
→ PropensityToWinHandler
→ ProjectService
→ FastAPI HTTP Call (ML Model)
→ Store Result in PostgreSQL (project_propensity_to_win_scores)
→ Log Success
Cache Flush
API: GET /diagnostics/flushCache
→ DiagnosticsController
→ Build FlushCacheRequest
→ BusProxy.Client.IPublisher.PublishMessage()
→ HTTP POST to BusProxy Service
→ BusProxy Distributes to All Subscribers
→ Each Service Instance Flushes Cache