创建 Web 服务
本页介绍了如何使用 Golang 编写的 Gin Web 框架在虚拟机中创建 Web 服务。您可以选择使用任何其他框架来创建 Web 服务。
- 如需在虚拟机中下载 Go 软件包,请在虚拟机中运行以下命令:
wget https://go.dev/dl/go1.22.5.linux-amd64.tar.gz
- 在虚拟机中安装 Go。如需了解相关信息,请参阅安装 Go。
- 如需为 Web 服务创建新目录,请运行以下命令:
mkdir SERVICE_REPO cd SERVICE_REPO
其他注意事项
创建 Web 服务时,您必须注意以下事项:
- 您在创建虚拟机期间所需的输入以环境变量的形式提供,并具有以下前缀:
CONNECTOR_ENV_
。 - 设置 Web 服务时,请使用环境变量读取此类值。
- 在创建虚拟机期间,必须仅将设置 Web 服务所需的值作为输入。
- 服务的端口必须从 CONNECTOR_ENV_PORT 变量中获取。
- 使用其他环境变量来表示可选输入。
- 您还可以在创建连接期间获取输入。您可以在创建自定义连接器时定义这些字段,并在每次 API 调用中将它们作为路径、查询或标头传递。
- 确保服务器在 localhost 上运行。
日志记录
记录所需信息,并将日志推送到 Cloud Logging。这有助于连接器使用者跟踪和调试故障。如需将日志发布到 Cloud Logging,您可以使用以下 Go 中提供的 Cloud Logging 客户端:https://pkg.go.dev/cloud.google.com/go/logging#NewClient
您必须在 main 中初始化记录器,并在 Gin 中添加中间件以跟踪所有传入的请求。您必须跟踪请求的方法、路径、状态和延迟时间。如需过滤日志,请在记录日志时使用适当的严重程度。在 Web 服务中,从环境变量读取日志级别。日志级别是在创建虚拟机期间作为可选输入项获取的。默认情况下,可以使用信息日志。日志级别如下:
- DEBUG:记录请求的每个部分,包括 HTTP 请求/响应轨迹。
- INFO:记录服务启动、服务关闭、请求和其他信息。
- ERROR:记录请求失败、格式设置异常和其他错误。
关停提醒
设置服务器以正常关闭并处理正在进行的请求。如需了解如何优雅地重启或停止服务器,请参阅优雅地重启或停止。
并发
Gin 服务器本身就支持使用 Go 例程处理并发请求。默认情况下,允许 Go 例程处理的请求数量不确定。不过,在某些情况下,如果预期请求会消耗大量资源,请使用工作器池来限制和缓冲服务器上的请求。如需了解详情,请参阅工作器池示例。
测试并构建二进制文件
- 使用以下命令设置端口并运行服务器:
- 如需验证服务器,请在虚拟机上运行以下 curl 命令:
curl -X POST -H "Content-Type: application/json" -H "X-Custom-Header: MyValue" -d '{"name": "Alice", "address": "123 Main St", "gender": "F"}' http://localhost:8081/postData/456
curl -v http://localhost:8081/getData -H "TestKey: MyValue"
- 使用以下命令创建二进制文件并将其用作虚拟机映像:
go build -o SERVICE_NAME
- 使用以下命令将二进制文件移至根文件夹:
sudo cp SERVICE_NAME /opt
- 再次运行该服务,以使用以下命令验证二进制文件是否按预期运行:
sudo chmod +x SERVICE_NAME ./SERVICE_NAME
EXPORT CONNECTOR_ENV_PORT = 8081 go get . go run .
这些命令会捆绑所需的库并运行服务器。
将应用容器化
- 安装 Docker。如需了解相关信息,请参阅安装 Docker。
- 创建 Docker 文件以运行二进制文件。
FROM alpine:latest WORKDIR /opt COPY . . CMD ["./SERVICE_NAME"]
- 使用以下命令构建连接器容器:
sudo docker build -t connector-container .
- 运行 Docker 容器。将
--restart=unless-stopped
设置为在发生意外故障时重启服务。
容器级任务
在运行 Docker 容器时,可以使用 gcplogs 日志驱动程序将 stdout 中的所有日志路由到 Cloud Logging。这有助于跟踪服务的启动、意外故障或关闭。
如需将日志路由到 Cloud Logging,请运行以下命令:sudo docker run --name connector-service -e CONNECTOR_ENV_PORT=$CONNECTOR_ENV_PORT -p $CONNECTOR_ENV_PORT:$CONNECTOR_ENV_PORT --restart=unless-stopped ----log-driver=gcplogs connector-container