Skip to content
Build bf98f58

Camel Topology

The cm-* Camel microservices are the middleware between storefronts, OMS, warehouses, and retailer EDI. This page shows how they wire together.

Layer Convention

Every service name ends in one of three suffixes:

Suffix Layer Role
*-exp Experience External-facing REST APIs
*-prc Processing Async business logic, ASB consumers
*-sys System Proxy/adapter to an external system (Cirro, NAV, Arena, etc.)

A typical flow: external caller hits *-exp → work gets queued to *-prc*-prc calls one or more *-sys services → *-sys talks to the external system.

Topology

Camel topology

The retiring cm-fulfill-exp is shown in red — new endpoints should land on cm-int-service-exp or cm-ext-service-exp.

Rendered from camel-topology.excalidraw. To regenerate after edits, run make topology-svg (spins up the local Kroki + excalidraw containers via docker-compose.yml).

Experience Layer

cm-ext-service-exp

External-facing REST (OMS, partners). Forwards fulfillment requests onto cm-fulfill-prc via ASB.

cm-int-service-exp

Internal REST for other PopSockets services. Delegates to cm-int-service-sys. New internal endpoints land here.

cm-fulfill-exp

Legacy fulfillment REST. Retiring — use cm-int-service-exp or cm-ext-service-exp for new work.

Processing Layer

cm-edi-prc

EDI 850/940/856/945 processing. Polls SPS/PS SFTP, splits documents, dispatches 940s to Cirro (see the EDI pipeline for the full flow), publishes shipped-b2b events when B2B orders ship.

cm-order-prc

Orchestrates order lifecycle, routes fulfillment, publishes shipped events. Calls 6 of the 9 *-sys services — everything except cm-product-sys, cm-printprod-sys, and cm-sfcc-sys.

cm-fulfill-prc

Handles fulfillment-request-* queues from OMS (AES-encrypted payloads), decrypts, forwards to Cirro. Walkthrough: Order Export example.

cm-batching-prc

Consumes batching-update-topic and fans out to PrintStation (via cm-printprod-sys), OMS, and cm-order-prc.

cm-product-prc

Polls Arena for item/ECO events via @Scheduled, fans out to OMS/batching/Jackyun. Exposes POST /jackyun/resync for manual SKU resync.

cm-int-service-prc

Likely ADX log ingestion — confidence is low. Verify before touching.

System Layer

cm-int-service-sys

Owns PostgreSQL edi_docs + fulfillment_tracking tables; also makes NAV SOAP calls for packaging instructions. No separate NAV service for this.

cm-cirro-sys

Bearer-token proxy to Cirro. Does not modify payloads.

cm-osor-sys

Proxy to OMS (popsockets-sandbox-2.diffagency.com). Handles order sync and Gladly endpoints.

cm-nav-sys

NAV order release worker. Consumes nav-order-release. Note: NAV SOAP packing-instructions calls live in cm-int-service-sys, not here.

cm-snowflake-sys

Writes order data to Snowflake DEV.CIRRO.*.

cm-printprod-sys

Consumes batching-update-printstation, forwards to PrintStation.

cm-product-sys

Arena PLM API proxy. Shares session tokens across pods via Hazelcast.

cm-jackyun-sys

Jackyun integration. Handles both order publishing (ASB-driven) and SKU/BOM upserts (HTTP from cm-product-prc).

cm-sfcc-sys

Salesforce Commerce Cloud integration. Rarely used — check before assuming it's active.

Infrastructure (not shown on map)

cm-spring-cloud-config-server

Provides config (PostgreSQL properties + Azure KeyVault secrets) to every cm-* service at startup. Omitted from the topology map to reduce noise.

cm-file-transfer

General SFTP utility. Proof-of-concept status, minimal active use.

Gotchas

  • cm-cirro-sys does not transform payloads. It's a thin proxy. Business logic happens in cm-order-prc, cm-fulfill-prc, or cm-edi-prc before the call.
  • NAV lives in two places. Order release goes through cm-nav-sys. Packaging instruction SOAP calls go through cm-int-service-sys. Don't assume all NAV traffic is in one place.
  • cm-jackyun-sys has two entry points. Orders flow in via the jackyun-orders-topic ASB topic from cm-order-prc. SKU/BOM upserts come in via HTTP from cm-product-prc.
  • cm-fulfill-exp is retiring. If you're adding a new fulfillment endpoint, put it on cm-int-service-exp or cm-ext-service-exp instead.
  • Three services have low confidence data. cm-int-service-prc, cm-sfcc-sys, and cm-file-transfer are rarely touched — verify assumptions against the code before relying on anything this page says about them.