# bootsrc/jseckill architecture

> Architecture diagram of the GitHub repository bootsrc/jseckill, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/bootsrc/jseckill
- Repository: https://github.com/bootsrc/jseckill

## Overview

jseckill is a Spring Boot flash-sale website. Users browse sale items, obtain a time-limited sale URL, submit a purchase, and poll for its outcome. The documented high-concurrency path rate-limits requests, queues eligible attempts through RabbitMQ, and processes inventory in Redis; successful purchases are then persisted with MySQL transactions. The map also shows the catalog/cache and web-client branches. Some implementation details are unsampled, so uncertain subsystem links are omitted; the README says Zookeeper is not currently used.

Main entry points: [`jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/service/impl/SeckillServiceImpl.java`](https://github.com/bootsrc/jseckill/blob/master/jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/service/impl/SeckillServiceImpl.java) (Sale service), [`jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/controller/SeckillController.java`](https://github.com/bootsrc/jseckill/blob/master/jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/controller/SeckillController.java) (Web controllers), [`jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/mq/MQProducer.java`](https://github.com/bootsrc/jseckill/blob/master/jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/mq/MQProducer.java) (Message producer), [`jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/mq/MQChannelManager.java`](https://github.com/bootsrc/jseckill/blob/master/jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/mq/MQChannelManager.java) (Channel manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web experience"]
  node_webclient["Sale pages and client<br/>[seckill.js]"]
  node_controllers["Web controllers"]
end

subgraph group_sale["Sale workflow"]
  node_sale_service["Sale service"]
  node_rate_limiter["Request limiter"]
  node_sale_types["Sale data and states<br/>[Seckill.java]"]
  node_message_body["Sale message"]
end

subgraph group_queue["Queue processing"]
  node_mq_producer["Message producer<br/>[MQProducer.java]"]
  node_mq_channel["Channel manager"]
  node_rabbitmq["RabbitMQ queue"]
  node_mq_consumer["Queue consumer<br/>[MQConsumer.java]"]
end

subgraph group_state["Inventory and orders"]
  node_redis_dao["Redis access<br/>[RedisDAO.java]"]
  node_redis[("Redis")]
  node_mysql_daos["Sale and order DAOs<br/>[PayOrderDAO.java]"]
  node_mysql[("MySQL<br/>[pay_order.sql]")]
  node_catalog_dao["Sale catalog DAO<br/>[SeckillDAO.java]"]
end

subgraph group_runtime["Runtime integrations"]
  node_runtime_config["Service configuration<br/>[MQConfigBean.java]"]
end

node_shopper(("Shopper"))

node_shopper -->|"browses and submits"| node_webclient
node_webclient -->|"requests and polls"| node_controllers
node_controllers -->|"delegates sale actions"| node_sale_service
node_sale_service -->|"checks rate limit"| node_rate_limiter
node_sale_service -->|"reads and caches catalog"| node_redis_dao
node_sale_service -->|"enqueues attempt"| node_mq_producer
node_sale_service -->|"persists purchase"| node_mysql_daos
node_mq_producer -->|"gets send channel"| node_mq_channel
node_mq_channel -->|"uses queue settings"| node_runtime_config
node_mq_channel -->|"declares queue"| node_rabbitmq
node_mq_producer -->|"publishes messages"| node_rabbitmq
node_rabbitmq -->|"delivers attempts"| node_mq_consumer
node_mq_consumer -->|"processes inventory"| node_sale_service
node_sale_service -->|"checks and decrements stock"| node_redis
node_redis_dao -->|"reads and writes cache"| node_redis
node_mysql_daos -->|"reads and writes orders"| node_mysql
node_sale_service -->|"loads sale records"| node_catalog_dao
node_catalog_dao -->|"queries catalog"| node_mysql
node_controllers -->|"returns sale results"| node_sale_types
node_sale_service -->|"builds queued message"| node_message_body
node_mq_consumer -->|"parses message"| node_message_body

click node_webclient "https://github.com/bootsrc/jseckill/blob/master/jseckill-backend/src/main/resources/static/js/seckill.js"
click node_controllers "https://github.com/bootsrc/jseckill/blob/master/jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/controller/SeckillController.java"
click node_sale_service "https://github.com/bootsrc/jseckill/blob/master/jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/service/impl/SeckillServiceImpl.java"
click node_rate_limiter "https://github.com/bootsrc/jseckill/blob/master/jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/service/impl/AccessLimitServiceImpl.java"
click node_sale_types "https://github.com/bootsrc/jseckill/blob/master/jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/entity/Seckill.java"
click node_message_body "https://github.com/bootsrc/jseckill/blob/master/jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/dto/SeckillMsgBody.java"
click node_mq_producer "https://github.com/bootsrc/jseckill/blob/master/jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/mq/MQProducer.java"
click node_mq_channel "https://github.com/bootsrc/jseckill/blob/master/jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/mq/MQChannelManager.java"
click node_mq_consumer "https://github.com/bootsrc/jseckill/blob/master/jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/mq/MQConsumer.java"
click node_redis_dao "https://github.com/bootsrc/jseckill/blob/master/jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/dao/cache/RedisDAO.java"
click node_mysql_daos "https://github.com/bootsrc/jseckill/blob/master/jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/dao/PayOrderDAO.java"
click node_mysql "https://github.com/bootsrc/jseckill/blob/master/sql/pay_order.sql"
click node_catalog_dao "https://github.com/bootsrc/jseckill/blob/master/jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/dao/SeckillDAO.java"
click node_runtime_config "https://github.com/bootsrc/jseckill/blob/master/jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/bean/MQConfigBean.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_webclient,node_controllers toneBlue
class node_sale_service,node_rate_limiter,node_sale_types,node_message_body toneAmber
class node_mq_producer,node_mq_channel,node_rabbitmq,node_mq_consumer toneMint
class node_redis_dao,node_redis,node_mysql_daos,node_mysql,node_catalog_dao toneRose
class node_runtime_config,node_shopper toneIndigo
```

## Components

### Web experience

- [Sale pages and client](https://github.com/bootsrc/jseckill/blob/master/jseckill-backend/src/main/resources/static/js/seckill.js): `jseckill-backend/src/main/resources/static/js/seckill.js`
- [Web controllers](https://github.com/bootsrc/jseckill/blob/master/jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/controller/SeckillController.java): `jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/controller/SeckillController.java`

### Sale workflow

- [Sale service](https://github.com/bootsrc/jseckill/blob/master/jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/service/impl/SeckillServiceImpl.java): `jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/service/impl/SeckillServiceImpl.java`
- [Request limiter](https://github.com/bootsrc/jseckill/blob/master/jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/service/impl/AccessLimitServiceImpl.java): `jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/service/impl/AccessLimitServiceImpl.java`
- [Sale data and states](https://github.com/bootsrc/jseckill/blob/master/jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/entity/Seckill.java): `jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/entity/Seckill.java`
- [Sale message](https://github.com/bootsrc/jseckill/blob/master/jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/dto/SeckillMsgBody.java): `jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/dto/SeckillMsgBody.java`

### Queue processing

- [Message producer](https://github.com/bootsrc/jseckill/blob/master/jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/mq/MQProducer.java): `jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/mq/MQProducer.java`
- [Channel manager](https://github.com/bootsrc/jseckill/blob/master/jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/mq/MQChannelManager.java): `jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/mq/MQChannelManager.java`
- **RabbitMQ queue**
- [Queue consumer](https://github.com/bootsrc/jseckill/blob/master/jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/mq/MQConsumer.java): `jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/mq/MQConsumer.java`

### Inventory and orders

- [Redis access](https://github.com/bootsrc/jseckill/blob/master/jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/dao/cache/RedisDAO.java): `jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/dao/cache/RedisDAO.java`
- **Redis**
- [Sale and order DAOs](https://github.com/bootsrc/jseckill/blob/master/jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/dao/PayOrderDAO.java): `jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/dao/PayOrderDAO.java`
- [MySQL](https://github.com/bootsrc/jseckill/blob/master/sql/pay_order.sql): `sql/pay_order.sql`
- [Sale catalog DAO](https://github.com/bootsrc/jseckill/blob/master/jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/dao/SeckillDAO.java): `jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/dao/SeckillDAO.java`

### Runtime integrations

- [Service configuration](https://github.com/bootsrc/jseckill/blob/master/jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/bean/MQConfigBean.java): `jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/bean/MQConfigBean.java`

### Other components

- **Shopper**

## Connections

- Shopper → Sale pages and client: browses and submits (evidence: `README.md`)
- Sale pages and client → Web controllers: requests and polls (evidence: `README.md`)
- Web controllers → Sale service: delegates sale actions (evidence: `jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/controller/SeckillController.java`)
- Sale service → Request limiter: checks rate limit (evidence: `jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/service/impl/SeckillServiceImpl.java`)
- Sale service → Redis access: reads and caches catalog (evidence: `jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/service/impl/SeckillServiceImpl.java`)
- Sale service → Message producer: enqueues attempt (evidence: `jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/service/impl/SeckillServiceImpl.java`)
- Sale service → Sale and order DAOs: persists purchase (evidence: `jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/service/impl/SeckillServiceImpl.java`)
- Message producer → Channel manager: gets send channel (evidence: `jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/mq/MQProducer.java`)
- Channel manager → Service configuration: uses queue settings (evidence: `jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/mq/MQChannelManager.java`)
- Channel manager → RabbitMQ queue: declares queue (evidence: `jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/mq/MQChannelManager.java`)
- Message producer → RabbitMQ queue: publishes messages (evidence: `README.md`)
- RabbitMQ queue → Queue consumer: delivers attempts (evidence: `README.md`)
- Queue consumer → Sale service: processes inventory (evidence: `jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/mq/MQConsumer.java`)
- Sale service → Redis: checks and decrements stock (evidence: `README.md`)
- Redis access → Redis: reads and writes cache (evidence: `jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/dao/cache/RedisDAO.java`)
- Sale and order DAOs → MySQL: reads and writes orders (evidence: `README.md`)
- Sale service → Sale catalog DAO: loads sale records (evidence: `jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/service/impl/SeckillServiceImpl.java`)
- Sale catalog DAO → MySQL: queries catalog (evidence: `jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/dao/SeckillDAO.java`)
- Web controllers → Sale data and states: returns sale results (evidence: `jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/controller/SeckillController.java`)
- Sale service → Sale message: builds queued message (evidence: `jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/service/impl/SeckillServiceImpl.java`)
- Queue consumer → Sale message: parses message (evidence: `jseckill-backend/src/main/java/com/liushaoming/jseckill/backend/mq/MQConsumer.java`)
