Deployment & Config
Application properties
All keys live in admin-api/application.properties and are env-overridable. The SQS queue and the
distribution topic default to sandbox; prod overrides them.
| Property | Default | Purpose |
|---|---|---|
channex.webhook.base-url | (blank) | Public host for the booking webhook; blank ⇒ webhook not registered |
channex.feed.poll-interval-ms | 900000 (15 min) | Revision feed backstop interval |
channex.feed.poll-initial-delay-ms | 60000 | Delay before the first poll |
channex.sqs.enabled | true | Event-driven ARI consumer (set false locally / where there's no SQS) |
channex.sqs.queue-name | channex-ari-fanout-sandbox | SQS queue to consume (batch listener, ack-on-success) |
channex.rate-limit.per-minute | 20 | ARI message rate cap (Channex limit) |
channex.retry.max-attempts | 4 | Retries on 429 / 5xx with exponential backoff |
channex.retry.base-backoff-ms | 500 | Base backoff between retries |
channex.ari.max-batch | 4000 | Max ARI entries per request (after range compression) |
channex.drift.enabled | false | Periodic full-push drift correction |
channex.drift.cron | 0 0 3 * * * (nightly, off-peak) | Full-sync schedule — at most once/24h per certification |
channex.booking.auto-apply | true | Map ingested OTA bookings into PMS bookings |
distribution.events.topic-arn | …:distribution-events-sandbox | SNS topic the publisher emits to |
Scheduling: admin-api did not previously enable
@Scheduled; the Channex config enables it (for the feed poller / drift / debounce flush). This also activates the other scheduled jobs in admin-api. If you run multiple replicas, add leader election before relying on exactly-once scheduled execution.
Per-environment overrides
| Env | CHANNEX_SQS_ENABLED | CHANNEX_SQS_QUEUE_NAME | DISTRIBUTION_EVENTS_TOPIC_ARN |
|---|---|---|---|
| sandbox / qa | (default true) | (default sandbox) | (default sandbox) |
| prod | (default true) | channex-ari-fanout-prod | …:distribution-events-prod |
| local | CHANNEX_SQS_ENABLED=false | n/a | n/a |
AWS infrastructure (ap-south-1)
Event-driven outbound uses env-isolated SNS topics so sandbox and prod never cross-talk:
distribution-events-prod → distribution-partner-fanout, channex-ari-fanout-prod
distribution-events-sandbox → channex-ari-fanout-sandbox
- SQS queues
channex-ari-fanout-{prod,sandbox}, each with a-dlq(redrive maxReceiveCount 5) and a queue policy allowing its env topic toSendMessage; subscriptions use raw message delivery. - The ECS task role (
ecsTaskExecutionRole) has an inline policychannex-ari-fanout-accessgranting consume on the queues. - Cutover: set
DISTRIBUTION_EVENTS_TOPIC_ARNper env so each publisher emits to its own topic. Until prod cuts over, the legacydistribution-eventstopic still feeds the partner fanout (which is also subscribed to the prod topic, so there is no interruption).
Per-channel credentials
Stored in channels.channel_config (JSONB): channexApiKey, channexEnvironment, channexGroupId,
channexWebhookSecret. See the Overview.