» Python:使用Kafka构建事件驱动微服务 » 3. 消费者:热搜服务 » 3.1 服务设计

服务设计

Event Queue

如图所示,热搜服务(Trend Service)从消息队列消费”search book“事件,分析数据并列出热门图书给用户。

热搜服务应该至少包含2个组件:

Trend Service Arch

  • 消费者: 负责消费并分析队列中的事件。
  • 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

重组目录结构

  1. 创建 service/ 目录,将 web/ 目录整体移入 service/
  2. 创建 service/domain/model 目录。此处用于存放 3 个服务的公共数据模型。
  3. service/web/domain/model 中文件全部移入到 service/domain/model,并更新相关 import 路径。

例如,在 service/web/domain/gateway/book_manager.py 中:

...
from ....domain.model import Book
...