0. 前言
- 原文参考:Golang 微服务教程(六)
- 上节使用 go-micro 搭建了微服务的事件驱动架构
- 本节将介绍 web 客户端的角度出发如何与微服务进行调用交互
1. 微服务与 web 端交互参
- 参考 go-micro 文档,可看到 go-micro 实现了为 web 客户端代理请求 RPC 方法的机制
1.1 内部调用
- 微服务 A 调用微服务 B 的方法,需要先实例化再调用:bClient.CallRPC(args...)
- 数据作为参数传递,属于内部调用
1.2 外部调用
- web 端浏览器是通过 HTTP 请求去调用微服务的方法,go-micro 就做了中间层
- 调用方法的数据以 HTTP 请求的方式提交,属于外部调用
2. REST vs RPC
- REST 风格多年来在 web 开发领域独领风骚
- 常用于客户端与服务端进行资源管理,应用场景比 RPC 和 SOAP 都要广得多
- 更多参考:知乎:RPC 与 RESTful API 对比
2.1 REST
- REST 风格对资源的管理既简单又规范
- 它将 HTTP 请求方法对应到资源的增删改查上
- 同时还可以使用 HTTP 错误码来描述响应状态
- 在大多数 web 开发中 REST 都是优秀的解决方案
2.2 RPC
- 近年来 RPC 风格也乘着微服务的顺风车逐渐普及开来
- REST 适合同时管理不同的资源,不过一般微服务只专注管理单一的资源
- 使用 RPC 风格能让 web 开发专注于各微服务的实现与交互
3. Micro 工具箱
- 之前一直在使用 go-micro 框架,现在来看看它的 API 网关
- go-micro 提供 API 网关给微服务做代理
- API 网关把微服务 RPC 方法代理成 web 请求,将 web 端使用到的 URL 开放出来,更多参考:go-micro toolkits,go-micro API example
- 执行 go get -u github.com/micro/micro 安装 go-mirco 工具箱
- 执行 docker pull microhq/micro,拉取镜像
- 修改 docker-compose.yaml:
version: '3.1'
services:
consignment-cli:
build: ./consignment-cli
environment:
MICRO_REGISTRY: "mdns"
consignment-service:
build: ./consignment-service
ports:
- 50051:50051
environment:
MICRO_ADRESS: ":50051"
MICRO_REGISTRY: "mdns"
DB_HOST: "datastore:27017"
depends_on:
- datastore
vessel-service:
build: ./vessel-service
ports:
- 50052:50051
environment:
MICRO_ADRESS: ":50051"
MICRO_REGISTRY: "mdns"
DB_HOST: "datastore:27017"
depends_on:
- datastore
user-service:
build: ./user-service
ports:
- 50053:50051
environment:
MICRO_ADRESS: ":50051"
MICRO_REGISTRY: "mdns"
DB_NAME: "postgres"
DB_HOST: "database"
DB_PORT: "5432"
DB_USER: "postgres"
DB_PASSWORD: "postgres"
MICRO_BROKER: "nats"
MICRO_BROKER_ADDRESS: "mq"
depends_on:
- database
- mq
- micro
email-service:
build: ./email-service
ports:
- 50054:50051
environment:
MICRO_ADRESS: ":50051"
MICRO_REGISTRY: "mdns"
MICRO_BROKER: "nats"
MICRO_BROKER_ADDRESS: "mq"
depends_on:
- mq
user-cli:
build: ./user-cli
environment:
MICRO_REGISTRY: "mdns"
datastore:
image: mongo
ports:
- 27017:27017
database:
image: postgres
ports:
- 5432:5432
mq:
image: nats
ports:
- 4222:4222
micro:
command: api --handler=rpc --namespace=go.micro.srv
image: microhq/micro:latest
ports:
- 8080:8080
View Code
- 添加 microhq/micro 镜像作为 user-service 的依赖镜像
- 通过 postman 测试 web 接口:
4. 总结
- 至此参考 Golang 微服务系列教程总结,学习了 Golang 下微服务的基本操作
- 首先要定义 proto 文件,然后根据编译生成的 *.pb.go 文件实现相应的业务接口
- 完善相关逻辑并拆分代码
- 可以根据 docker-compose.yaml 统一管理各个微服务,可以定义环境变量和镜像依赖关系
5. 参考文献