How openexch/match works
Match Engine is the clustered matching core of an exchange stack; the README places order management and risk upstream in a separate OMS. The principal workflow is order ingress through Aeron consensus, command dispatch and per-market matching, then egress to market-data clients. The gateway also maintains live market state, streams WebSocket updates, and offers persisted historical data with in-memory fallback. The graph preserves create/cancel/update, cluster recovery, and load-generation capabilities. Some gateway and cluster wiring is based on the documented flow and module roles; unsampled internals are not expanded.
Main entry points: AppClusteredService.java Cluster service · GatewayStateManager.java Gateway state · Engine.java Order engine · DirectMatchingEngine.java Matching engine
Components 24
Order ingress
- Order gateway
match-gateway/src/main/java/com/match/infrastructure/gateway/GatewayHttpHandler.java - Aeron gateway
match-gateway/src/main/java/com/match/infrastructure/gateway/AeronGateway.java
Matching core
- Order engine
match-cluster/src/main/java/com/match/application/engine/Engine.java - Order handlers
match-cluster/src/main/java/com/match/application/handlers/LimitOrderHandler.java - Matching engine
match-cluster/src/main/java/com/match/application/orderbook/DirectMatchingEngine.java - Direct order book
match-cluster/src/main/java/com/match/application/orderbook/DirectIndexOrderBook.java - Order domain
match-common/src/main/java/com/match/domain/Order.java - Event publisher
match-cluster/src/main/java/com/match/application/publisher/MatchEventPublisher.java
Cluster runtime
- Aeron cluster
match-cluster/src/main/java/com/match/infrastructure/persistence/AeronCluster.java - Cluster service
match-cluster/src/main/java/com/match/infrastructure/persistence/AppClusteredService.java - Command demuxer
match-cluster/src/main/java/com/match/infrastructure/persistence/SbeDemuxer.java - Settlement journal
match-cluster/src/main/java/com/match/infrastructure/journal/SettlementJournal.java - Snapshot codec
match-cluster/src/main/java/com/match/infrastructure/persistence/SnapshotCodec.java
Market data
- Market gateway
match-gateway/src/main/java/com/match/infrastructure/gateway/AeronGateway.java - Gateway state
match-gateway/src/main/java/com/match/infrastructure/gateway/state/GatewayStateManager.java - WebSocket service
match-gateway/src/main/java/com/match/infrastructure/websocket/MarketDataWebSocket.java - Subscriptions
match-common/src/main/java/com/match/infrastructure/websocket/SubscriptionManager.java - Market data store
match-gateway/src/main/java/com/match/infrastructure/gateway/persistence/MarketDataDb.java - Trade writer
match-gateway/src/main/java/com/match/infrastructure/gateway/persistence/TradeWriter.java - Historical reads
match-gateway/src/main/java/com/match/infrastructure/gateway/persistence/MarketDataReadService.java - Rolling ticker
match-gateway/src/main/java/com/match/infrastructure/gateway/persistence/RollingTickerService.java
Clients and storage
- Market clients
- Load generator
match-loadtest/src/main/java/com/match/loadtest/LoadGenerator.java
Other components
- OMS
Connections 26
- OMS → Order gateway: submits orders
- Order gateway → Aeron gateway: forwards ingress
- Aeron gateway → Aeron cluster: sends commands
- Aeron cluster → Cluster service: dispatches events
- Cluster service → Command demuxer: decodes commands
- Command demuxer → Order engine: dispatches commands
- Order engine → Order handlers: selects handler
- Order engine → Matching engine: processes order
- Matching engine → Direct order book: reads and updates
- Matching engine → Event publisher: match results
- Event publisher → Cluster service: publishes egress
- Cluster service → Settlement journal: records settlement
- Cluster service → Snapshot codec: encodes state
- Snapshot codec → Cluster service: restores state
- Cluster service → Market gateway: sends market egress
- Market gateway → Gateway state: updates market state
- Gateway state → WebSocket service: broadcasts updates
- WebSocket service → Subscriptions: routes subscribers
- Market clients → WebSocket service: subscribes
- Gateway state → Trade writer: provides trades
- Trade writer → Market data store: writes trades
- Historical reads → Market data store: reads history
- Rolling ticker → Market data store: reads baselines
- Rolling ticker → Gateway state: updates ticker state
- Market clients → Historical reads: requests history
- Load generator → Order gateway: submits load