一键导入
project-architecture
High-level architecture and design patterns for the crypto-scout ecosystem
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
High-level architecture and design patterns for the crypto-scout ecosystem
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | project-architecture |
| description | High-level architecture and design patterns for the crypto-scout ecosystem |
| license | MIT |
| compatibility | opencode |
| metadata | {"domain":"architecture","pattern":"microservices","style":"event-driven"} |
Provide comprehensive guidance on the architecture, design patterns, and system interactions within the crypto-scout ecosystem.
flowchart TB
subgraph External["External APIs"]
Bybit["Bybit API<br/>WebSocket + REST"]
CMC["CoinMarketCap API<br/>REST"]
end
subgraph Library["Core Library"]
JCL["jcryptolib v0.0.4<br/>(Bybit Stream, CMC Parser,<br/>Analysis Engine)"]
end
subgraph Messaging["RabbitMQ Messaging"]
BS["bybit-stream"]
CS["crypto-scout-stream"]
CQ["collector-queue"]
end
subgraph Services["Microservices"]
Client["crypto-scout-client v0.0.1<br/>(Data Collection)"]
Collector["crypto-scout-collector v0.0.1<br/>(Data Persistence)"]
Analyst["crypto-scout-analyst v0.0.1<br/>(Analysis)"]
end
subgraph Storage["Data Storage"]
DB[("TimescaleDB<br/>Time-series data")]
end
Bybit -->|WebSocket| JCL
CMC -->|REST| JCL
JCL -->|Uses| Client
Client -->|Publish| BS
Client -->|Publish| CS
BS -->|Consume| Collector
CS -->|Consume| Collector
Collector -->|JDBC| DB
BS -->|Consume| Analyst
CS -->|Consume| Analyst
CQ -->|AMQP| Collector
Purpose: Core cryptocurrency library shared across all services
Components:
bybit/stream/): WebSocket client with resilience patterns
BybitStream: Main streaming class with auto-reconnect, ping/pongBybitParser: REST API data fetchingPingPongHandler: WebSocket heartbeat managementRequests/Responses: Message builders/parserscmc/parser/): REST API client with scheduling
CmcParser: Main parser with rate limitingCmcConfig: Configuration managementanalysis/engine/): Technical indicators
AnalystEngine: Main analysis orchestratorSmaIndicator: Simple Moving AverageEmaIndicator: Exponential Moving AverageBitcoinRiskIndicator: BTC risk assessmentresilience/): Circuit breaker, rate limiter, health checksstream/): Payload, Message, Provider, Source, Statisticutil/): JsonUtils, ParserUtils, TimeUtils, ValueUtils, SecUtilsexception/): 10 exception types with hierarchyUsage: Dependency for all other Java modules
Purpose: Shared test utilities library
Components:
MockData: Typed access to JSON test fixtures (bybit-spot, bybit-linear, crypto-scout)PodmanCompose: Container lifecycle managementStreamTestPublisher/StreamTestConsumer: RabbitMQ Streams test utilitiesAmqpTestPublisher/AmqpTestConsumer: AMQP test utilitiesDBUtils: Database operations for testsAssertions: Custom test assertionsUsage: Test-scoped dependency in collector and analyst
Purpose: Real-time market data collection
Data Sources:
Architecture:
Client (Launcher)
├── CoreModule (Reactor, Executor)
├── WebModule (HTTP server, Health)
├── ClientModule (AmqpPublisher)
├── BybitSpotModule (WebSocket consumers)
│ ├── BybitSpotBtcUsdtConsumer
│ └── BybitSpotEthUsdtConsumer
├── BybitLinearModule (WebSocket consumers)
│ ├── BybitLinearBtcUsdtConsumer
│ └── BybitLinearEthUsdtConsumer
├── CmcParserModule (HTTP parser)
│ └── CmcParserConsumer
└── JmxModule (Monitoring)
Publishing Strategy:
bybit-streamcrypto-scout-streamPurpose: Data persistence and storage
Stream Consumers:
bybit-stream → BybitStreamServicecrypto-scout-stream → CryptoScoutServicecollector-queue (AMQP) → AmqpConsumerData Flow:
StreamService
├── BybitStreamService
│ ├── BybitSpotRepository (spot tables)
│ └── BybitLinearRepository (linear tables)
└── CryptoScoutService
└── CryptoScoutRepository (fgi, klines, risk)
AmqpConsumer
└── Command/Control messages
Repositories:
BybitSpotRepository: Spot market dataBybitLinearRepository: Linear/perp market dataCryptoScoutRepository: CMC/analysis dataAnalystRepository: Analyst-specific tablesStreamOffsetsRepository: Offset trackingOffset Management: DB-backed offsets for exactly-once processing
Purpose: Market analysis and alerting
Architecture:
Analyst (Launcher)
├── CoreModule (Reactor, Executor)
├── WebModule (HTTP server, Health)
├── AnalystModule (Analysis services)
│ ├── StreamService
│ │ ├── BybitStreamService
│ │ └── CryptoScoutService
│ ├── Stream transformers
│ │ ├── BytesToPayloadTransformer
│ │ └── AnalystTransformer
│ ├── DataService (async processing)
│ └── StreamPublisher (output)
└── JmxModule (Monitoring)
Stream Processing Pipeline:
RabbitMQ Stream → Consumer → BytesToPayloadTransformer → AnalystTransformer → DataService → Output
Components:
StreamService: Orchestrates stream consumptionCryptoScoutService: Consumes from crypto-scout-stream with transformersBybitStreamService: Consumes from bybit-streamDataService: Processes payloads asynchronouslyAnalystTransformer: Stream transformer for preprocessingStreamPublisher: Output publisherPurpose: Messaging infrastructure (not a Java module)
Components:
Streams:
| Stream | Purpose | Retention |
|---|---|---|
bybit-stream | Bybit market data | 1 day, 2GB max |
crypto-scout-stream | CMC/parser data | 1 day, 2GB max |
Queues:
| Queue | Purpose | Arguments |
|---|---|---|
collector-queue | Command/control messages | lazy mode, TTL 6h, max 2500 |
chatbot-queue | Chatbot notifications | lazy mode, TTL 6h, max 2500 |
dlx-queue | Dead letter handling | lazy mode, TTL 7d |
Deployment: Podman Compose with persistent volumes
Bybit WebSocket → crypto-scout-client → bybit-stream → crypto-scout-collector → TimescaleDB
CMC REST API → crypto-scout-client → crypto-scout-stream → crypto-scout-collector → TimescaleDB
Streams → crypto-scout-analyst → [Transformers] → DataService → Output/Alerts
External → collector-queue (AMQP) → crypto-scout-collector → Action
public final class Service extends Launcher {
@Override
protected Module getModule() {
return combine(
CoreModule.create(), // Reactor + Executor
ServiceModule.create(), // Service-specific
WebModule.create() // HTTP + Health
);
}
@Override
protected void run() throws Exception {
awaitShutdown(); // Block until SIGTERM
}
}
public final class MyService extends AbstractReactive implements ReactiveService {
@Override
public Promise<Void> start() {
return Promise.ofBlocking(executor, () -> {
// Initialize resources
});
}
@Override
public Promise<Void> stop() {
return Promise.ofBlocking(executor, () -> {
// Cleanup resources
});
}
}
public final class DataRepository {
private final DataSource dataSource;
public void saveBatch(final List<Data> data) throws SQLException {
try (final var conn = dataSource.getConnection();
final var stmt = conn.prepareStatement(SQL)) {
for (final var d : data) {
// set parameters
stmt.addBatch();
}
stmt.executeBatch();
}
}
}
public final class AnalystTransformer extends AbstractStreamTransformer<StreamPayload, StreamPayload> {
@Override
protected StreamDataAcceptor<StreamPayload> onResumed(final StreamDataAcceptor<StreamPayload> output) {
return in -> {
final var result = process(in);
output.accept(result);
};
}
}
public final class Service {
public static Service create(final NioReactor reactor,
final Executor executor) {
return new Service(reactor, executor);
}
private Service(final NioReactor reactor, final Executor executor) {
// Private constructor
}
}
src/main/resources/application.properties-D flagsserver.port → SERVER_PORT
amqp.rabbitmq.host → AMQP_RABBITMQ_HOST
jdbc.datasource.url → JDBC_DATASOURCE_URL
static final String VALUE = System.getProperty("key", "default");
IllegalStateException for invalid statescrypto-scout-bridgeGET /health → "ok" (200) or "not-ready" (503)
# Local with Podman Compose
podman-compose up -d # All services
# Individual service deployment
podman-compose up -d crypto-scout-client
podman-compose up -d crypto-scout-collector
podman-compose up -d crypto-scout-analyst
Use this skill when:
Java 25 development patterns for the crypto-scout ecosystem including microservices, ActiveJ, and async I/O
Maven build configuration for the crypto-scout multi-module Java 25 project
Podman Compose orchestration for crypto-scout services including RabbitMQ, TimescaleDB, and microservices
RabbitMQ Streams and AMQP messaging patterns for the crypto-scout ecosystem
TimescaleDB data modeling and operations for crypto market time-series data