CloudAPI - Event Catalog

🏠 Home BuildingServices / CloudAPI / docs

CloudAPI - Event Catalog

Overview

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

Schema:

{
  "authorizationNumber": 12345,
  "requestType": "Project"
}

Request Type Enum: - Project - Supported - BidRequest - Not yet supported (throws InvalidOperationException)

Processing Flow: 1. Message consumed by TELSPropensityToWinConsumer 2. Delegated to PropensityToWinHandler.CallCalculatePropensityToWin() 3. Handler calls ProjectService.CalculateProjectPropensityToWin(authorizationNumber) 4. Service fetches project metadata and calls FastAPI HTTP endpoint 5. ML prediction result stored in public.project_propensity_to_win_scores 6. Success logged: "Completed Calculate Propensity To Win Successfully!"

Error Handling: - Wrapped in transaction context - Errors logged via ILogger - No explicit retry policy configured (uses MassTransit defaults)


Published Events (Outbound)

FlushCacheRequest

Property Value
Source DiagnosticsController (API)
Trigger GET /buildingservices/v1/cloudapi/diagnostics/flushCache
Publisher BusProxy.Client.IPublisher
Authorization DirectSupplyPartner persona only
Delivery HTTP to BusProxy service with 45s timeout

Schema:

{
  "machineName": "MACHINE-NAME",
  "cacheDomain": "optional-cache-domain"
}

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
BusProxy Publishing None visible Managed by BusProxy.Client library

Health Monitoring

HealthCheckWorker

Property Value
Type Hosted Background Service
Purpose Monitor message bus health
Interval AppSettings.HealthCheckIntervalSeconds
Unhealthy Threshold AppSettings.UnHealthyTimeThresholdSeconds
File /TELS.CloudAPI.MQServices/Options/HealthCheckWorker.cs

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

Contract Packages

Package Version (API) Version (MQServices) Events Provided
BuildingServices.Contracts v1.524.0 v1.511.0 CalculatePropensityToWinMessage, FlushCacheRequest, RequestType
BusProxy.Client v2.3.0 N/A Publishing interface
MassTransit v8.3.1 v8.3.1 Message bus framework

Key Files & Locations

File Purpose
/TELS.CloudAPI.MQServices/Program.cs MassTransit bus registration, consumer setup
/TELS.CloudAPI.MQServices/Consumers/PropensityToWinConsumer.cs Consumer implementation
/TELS.CloudAPI.MQServices/Handlers/PropensityToWinHandler.cs Handler layer
/TELS.CloudAPI.MQServices/Logic/PropensityToWinImplementation.cs Business logic
/TELS.CloudAPI.Api/Controllers/DiagnosticsController.cs Message publisher
/TELS.CloudAPI.Api/DependencyInjection/DependencyInjectionExtensions.cs BusProxy registration
/TELS.CloudAPI.MQServices/Options/RabbitConnectionInfo.cs RabbitMQ connection config
/TELS.CloudAPI.MQServices/Options/HealthCheckWorker.cs Bus health monitoring

Summary Statistics


Notes