Skip to content

Solace

Solace is Roche’s enterprise event bus, hosted on AWS Frankfurt as a managed cloud service. The roche-data pipeline publishes data product lifecycle events (created, updated, certified) to Solace topics, enabling downstream systems to react to data product changes in near-real-time. The pipeline also subscribes to MRHub change events for reference data cache invalidation.

Access confirmed: 2026-05-07 — client certificate auth verified, test publish returned HTTP 200.

PropertyValue
SEAL API URLhttps://global-seal.roche.com
SEAL frontendhttps://seal.roche.com
Auth method (SEAL)Bearer token
Auth method (Broker)Client certificate (PEM — cert + key from Vault)
Broker userRXPMODE0
NetworkCloud (AWS Frankfurt) — TLS only, VPN required
Access taskA04
ServiceNow requestRITM6309240
GitHub issue#24 (shared with MRHub)
EnvironmentMessage VPNSecured REST (port 9443)Secured SMF (port 55443)
DEVsol-aws-de-dev-01https://sol-aws-de-dev-01.messaging.solace.cloud:9443tcps://sol-aws-de-dev-01.messaging.solace.cloud:55443
TSTsol-aws-de-tst-01https://sol-aws-de-tst-01.messaging.solace.cloud:9443tcps://sol-aws-de-tst-01.messaging.solace.cloud:55443
UATsol-aws-de-uat-01https://sol-aws-de-uat-01.messaging.solace.cloud:9443tcps://sol-aws-de-uat-01.messaging.solace.cloud:55443
PRDsol-aws-de-prd-01https://sol-aws-de-prd-01.messaging.solace.cloud:9443tcps://sol-aws-de-prd-01.messaging.solace.cloud:55443

All Solace credentials are stored in Vault at secret/{target}/solace and loaded via scripts/vault-env.sh.

VariableDescription
SOLACE_BROKER_URLBroker REST endpoint for the target environment
SOLACE_VPN_NAMEMessage VPN name per environment
SOLACE_USERBroker username (RXPMODE0)
SOLACE_CLIENT_CERTPEM certificate (full chain: leaf + issuing CA + root CA)
SOLACE_CLIENT_KEYPEM private key (RSA)
SOLACE_CLIENT_CERT_EXPIRECertificate expiry (2028-05-05)
SOLACE_SEAL_API_URLSEAL provisioning API base URL
SOLACE_API_TOKENSEAL API bearer token (expires 2026-12-31)
SOLACE_API_KEYAPI key (expires 2026-06-30)
ModuleUsage
rdt-model-eventPublishes data product lifecycle events to Solace topics via Secured REST
All rdt-model-*Automatic execution event on every module run (via rdt-model-common/events.rs)

Every CLI module publishes a lightweight execution event to Solace after completing its run. This is enforced at compile time — ModuleResultBuilder::finish() requires a &PublishContext parameter.

Payload:

{
"module": "rdt-model-pull",
"run_id": "019600ab-cdef-7123-89ab-0123456789ab",
"status": "ok",
"entity_id": "waste-tracking",
"duration_ms": 1247,
"timestamp": "2026-05-07T14:23:01.123Z",
"target": "dev"
}

Behavior:

  • Dry-run or missing credentials → silently skipped
  • Publish failure → warning logged, module succeeds normally
  • Run ID (--run-id / RDT_RUN_ID) correlates all modules in one pipeline execution
  • Implementation: cli/common/src/events.rs — spawns a dedicated thread with 5s timeout

The confirmed production topic for pipeline lifecycle events:

Pharma/Tech/Solace/InterLayer/PRC/1/RSVD/RSVD/Created/v1/SYS/CLI-EXECUTE
  • Second level must be Data, Func, or Tech
  • No wildcards in published topics (wildcards are for subscriptions only)
  • Alphanumeric, dashes, and forward slashes only
  • Levels separated by /

Broker REST — Client Certificate (confirmed working)

Section titled “Broker REST — Client Certificate (confirmed working)”

The pipeline authenticates to the Solace broker using a Roche-issued client certificate (PEM format). The certificate and private key are stored in Vault.

Terminal window
curl -s -X POST \
--cert /tmp/solace-cert.pem --key /tmp/solace-key.pem \
-H "Content-Type: application/json" \
-d '{"entity_id":"waste-tracking","event_type":"entity.created"}' \
"https://sol-aws-de-dev-01.messaging.solace.cloud:9443/Pharma/Tech/Solace/InterLayer/PRC/1/RSVD/RSVD/Created/v1/SYS/CLI-EXECUTE"
# → HTTP 200 (Guaranteed Messaging, spooled to queue)

In rdt-model-event, use reqwest::Identity::from_pem() with the concatenated cert + key:

let identity = reqwest::Identity::from_pem(cert_and_key_pem.as_bytes())?;
let client = reqwest::Client::builder()
.identity(identity)
.build()?;
Terminal window
curl -s -H "Authorization: Bearer $SOLACE_API_TOKEN" \
https://global-seal.roche.com/api/v1/request/some-uuid

Token is created from the SEAL frontend (https://seal.roche.com → API Tokens).

Script: scripts/check-solace-access.sh

Loads credentials from Vault and publishes a test message using client certificate auth:

Terminal window
./scripts/check-solace-access.sh # dev (default)
./scripts/check-solace-access.sh test # test env

SEAL (Self-Service Event-Driven Automated Landpoint) manages Solace object provisioning:

MethodPathPurpose
GET/pingConnectivity test (public, no auth)
GET/_healthHealth check (browser session auth only)
GET/api/v1/request/{id}Check provisioning request status
POST/api/v1/create-queueCreate a new queue
POST/api/v1/add-topicAdd topic subscriptions to a queue
POST/api/v1/create-userCreate a broker user
POST/api/v1/promotePromote objects between environments

Objects are created in DEV or TST, then promoted:

dev → tst → uat → prd

Direct creation in UAT/PRD is not supported — promotion is required.

SettingValueRationale
Delivery modeGuaranteed MessagingNo message loss tolerance
ProtocolREST (HTTPS)No native SDK needed — plain reqwest
Max redelivery5Prevents poison message loops
TLSAlwaysRequired for all cloud broker access
Reconnection retries20Roche default

The client certificate expires 2028-05-05. To renew:

  1. Go to https://code.roche.com/roche-mulesoft-api-center-admin/certificate-manager-dicr/RXPMODE0
  2. Request a new certificate
  3. Update SOLACE_CLIENT_CERT, SOLACE_CLIENT_KEY, and SOLACE_CLIENT_CERT_EXPIRE in Vault
RoleName
Solace Operationsgis_it.solace_operations@roche.com
Component OwnerSamuel Anandh
Tech LeadDaniel Donovan
Integration ArchitectPrasoon Paliwal