服务设计
如图所示,热搜服务(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
...