服务设计
如图所示,热搜服务(Trend Service)从消息队列消费”search book“事件,分析数据并列出热门图书给用户。
热搜服务应该至少包含2个组件:
- 消费者: 负责消费并分析队列中的事件。
- API服务器: 负责向用户展示热搜。
本教程中有 3 个服务,但我们没必要整 3 个仓库。既然都是 Python 开发的,可以尝试一下单仓(monorepo)。
单仓 Monorepo
单仓即”单体仓库“(monolithic repository),是一种将多个项目或系统模块存放在一个仓库内的软件开发方式。
我们需要重整一下项目结构:
.
├── LICENSE
├── README.md
├── requirements.txt
└── service
├── domain
│ └── model
│ ├── __init__.py
│ ├── book.py
│ └── trend.py
├── recommendation
│ └── main.py
├── trend
│ └── main.py
└── web
├── adapter
│ ├── router.py
│ └── templates
│ └── index.html
├── application
│ ├── __init__.py
│ ├── dto
│ │ ├── __init__.py
│ │ └── book.py
│ ├── executor
│ │ ├── __init__.py
│ │ └── book_operator.py
│ └── wire_helper.py
├── config.yml
├── domain
│ └── gateway
│ ├── __init__.py
│ └── book_manager.py
├── infrastructure
│ ├── config
│ │ ├── __init__.py
│ │ └── config.py
│ ├── database
│ │ ├── __init__.py
│ │ └── mysql.py
│ └── mq
│ ├── __init__.py
│ ├── helper.py
│ └── kafka.py
└── main.py
重组目录结构
- 创建 service/ 目录,将 web/ 目录整体移入 service/。
- 创建 service/domain/model 目录。此处用于存放 3 个服务的公共数据模型。
- service/web/domain/model 中文件全部移入到 service/domain/model,并更新相关 import 路径。
例如,在 service/web/domain/gateway/book_manager.py 中:
...
from ....domain.model import Book
...