研究 go-zero 通过 go-queue (Kafka) 消息队列与 Python 程序的交互方式。
┌─────────────────┐ Kafka ┌─────────────────┐
│ Go Producer │ ──────────────▶│ Python Consumer│
│ (go-queue kq) │ go-python- │ (kafka-python) │
└─────────────────┘ topic └─────────────────┘
│ ▲
│ │
▼ │
┌─────────────────┐ Kafka ┌─────────────────┐
│ Python Producer│ ──────────────▶│ Go Consumer │
│ (kafka-python) │ go-python- │ (go-queue kq) │
└─────────────────┘ topic └─────────────────┘
核心要点:Go 和 Python 通过 Kafka 作为中间件通信。go-queue 的 kq 模块基于 segmentio/kafka-go,与 Python 的 kafka-python 使用相同的 Kafka 协议,因此可以无缝互通。
统一使用 JSON,便于跨语言解析:
{
"source": "go" | "python",
"content": "消息内容",
"timestamp": "2025-02-25T10:00:00Z"
}cd go-queue-python
docker-compose up -d等待 Kafka 就绪(约 10-20 秒)。
Go:
go mod tidy
# 若网络较慢,可尝试: GOPROXY=https://goproxy.cn,direct go mod tidyPython:
cd python
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt场景 A:Go 发 → Python 收
终端 1 启动 Go 生产者:
go run ./cmd/producer终端 2 启动 Python 消费者:
cd python && source .venv/bin/activate && python consumer.py场景 B:Python 发 → Go 收
终端 1 启动 Go 消费者:
go run ./cmd/consumer终端 2 启动 Python 生产者:
cd python && source .venv/bin/activate && python producer.py场景 C:双向互通
同时启动 Go 消费者、Python 消费者、Go 生产者、Python 生产者,可看到双方互相收发消息。
go-queue-python/
├── cmd/
│ ├── producer/ # Go 生产者 (go-queue kq)
│ └── consumer/ # Go 消费者 (go-queue kq)
├── python/
│ ├── producer.py # Python 生产者
│ ├── consumer.py # Python 消费者
│ └── requirements.txt
├── config.yaml # Go 消费者 Kafka 配置
├── docker-compose.yml
└── README.md
| 配置项 | 说明 | 默认值 |
|---|---|---|
| Brokers | Kafka 地址 | 127.0.0.1:9092 |
| Topic | 主题名 | go-python-topic |
| Group | 消费者组 | go-python-group |
| Offset | 起始偏移 | first |
修改 config.yaml 或 Python 脚本中的 BROKERS、TOPIC 以适配你的环境。
- 协议兼容:Kafka 是语言无关的,go-queue kq 与 kafka-python 都遵循 Kafka 协议。
- 序列化:建议使用 JSON 作为消息体,便于双方解析。
- 消费者组:Go 和 Python 可使用不同消费者组,实现多路消费。
- Topic:双方必须订阅/发布同一 Topic 才能互通。