Tasks Service - Event Catalog

🏠 Home tasks / docs

Tasks Service - Event Catalog

Overview

The Tasks service uses RabbitMQ via MassTransit 8.2.5 for asynchronous messaging. It operates two bus instances and uses BusProxy for outbound publishing with fallback strategies.

Bus Architecture

Bus Purpose Consumers
Main Bus Core task events, generation requests TaskInstanceGenerationConsumer, BusinessUnitChangeConsumer
Scheduling Bus Schedule lifecycle events from external Scheduling service ScheduleCreatedConsumer, ScheduleRemovedConsumer, TaskUpdatedConsumer, MassSchedulesRemovedConsumer

Delivery & Fallback

Environment Primary Handler Fallback Handler
Production/Sandbox WebServiceHandler (HTTP) S3Handler (AWS S3)
Local/Integration WebServiceHandler (HTTP) SqlServerHandler (SQL Server)

Publishing timeout: 45 seconds


Consumed Events (Inbound)

From Customers Service

IBusinessUnitChangeV1

From Scheduling Service

IScheduleCreatedEvent

IScheduleRemovedEvent

ITaskUpdatedEvent

IMassSchedulesRemovedEvent

Internal (Self-Consumed)

ITaskInstanceGenerationRequested

IScheduleRecurringTaskInstanceGenerationRequest

IUnscheduleRecurringTaskInstanceGenerationRequest


Published Events (Outbound)

Domain Events (via BusProxy)

TaskInstanceCompletedEvent

TaskInstanceDocumentCreated

ScheduleCreatedEvent

ScheduleRemovedEvent

OutboundEmailEnvelope

Request/Response Messages (via MassTransit)

ScheduleRecurringTaskInstanceGenerationSucceeded

ScheduleRecurringTaskInstanceGenerationFailed

UnscheduleRecurringTaskInstanceGenerationSucceeded

UnscheduleRecurringTaskInstanceGenerationFailed


Quartz Scheduling

Backend: PostgreSQL persistent store Scheduler ID: AUTO (clustered) Serializer: Newtonsoft JSON Max Batch Size: 10 triggers per batch Misfire Threshold: 1.5 hours

Scheduled Jobs

Job Message Description
GenerateTaskInstancesSchedule ITaskInstanceGenerationRequested Recurring per-facility task instance generation

Schedule Identity:

Schedule ID: FacilityScheduleId(facilityId)  // unique per facility
Group: ScheduleGroupName                      // shared group

Retry Policies

Context Retries Backoff Exception
BusinessUnitChange consumer 5 5s, 30s, 1m, 3m, 5m All
SQL connection (MQServices) 5 Exponential: 10ms → 100s SqlException
Task instance generator 5 Exponential: 10ms → 100s All
HTTP clients (Polly) Configured Exponential Transient HTTP

Message Flow Diagrams

1. Business Unit Activation → Task Generation

Customers Service
  → publishes IBusinessUnitChangeV1
  → RabbitMQ (Main Bus)
  → BusinessUnitChangeConsumer
  → TaskInstanceGenerationHandler
  → Schedules Quartz job for recurring generation
  → Quartz fires ITaskInstanceGenerationRequested
  → TaskInstanceGenerationConsumer
  → Generates task instances in SQL Server

2. Schedule Lifecycle

API: POST /Schedules (create)
  → Persists to SQL Server
  → Publishes ScheduleCreatedEvent via BusProxy
  → Scheduling Service receives event

Scheduling Service
  → Publishes IScheduleCreatedEvent
  → RabbitMQ (Scheduling Bus)
  → ScheduleCreatedConsumer
  → Triggers instance generation

3. Task Completion

API: POST /Instances/{id}/commands/complete
  → Updates instance status in SQL Server
  → Publishes TaskInstanceCompletedEvent via BusProxy
  → External systems receive event

4. Recurring Instance Generation (Request/Response)

API: POST /commands/scheduleRecurringTaskInstanceGeneration
  → MassTransit RequestClient
  → IScheduleRecurringTaskInstanceGenerationRequest
  → TaskInstanceGenerationConsumer
  → Configures Quartz schedule
  → Responds: Succeeded or Failed
  → API returns result to caller

Contract Packages

Package Version Events Provided
TELS.Tasks.Contracts (local) ITaskInstanceCompletedEvent, ITaskInstanceDocumentCreated, ITaskInstanceGenerationRequested, schedule/unschedule request/response types
TELS.Scheduling.Events 1.4.3 IScheduleCreatedEvent, IScheduleRemovedEvent, ITaskUpdatedEvent, IMassSchedulesRemovedEvent, ScheduleCreatedEvent, ScheduleRemovedEvent
DSE.TELS.Customers.Events 1.0.287926 IBusinessUnitChangeV1
Unity.Notifications.Messaging 1.10.846068 OutboundEmailEnvelope, OutboundEmailMessage, OutboundEmailAttachment
DSE.TELS.Assets.Contracts 2.724197.0 Asset data contracts (referenced, not MQ)
DSE.TELS.Customers.Contracts 1.78.0 Customer data contracts (referenced, not MQ)