创建 Web 服务

本页介绍了如何使用 Golang 编写的 Gin Web 框架在虚拟机中创建 Web 服务。您可以选择在要使用的任何其他框架中创建 Web 服务。

  1. 如需在虚拟机中下载 Go 软件包,请在虚拟机中运行以下命令:
    wget https://go.dev/dl/go1.22.5.linux-amd64.tar.gz
      
  2. 在虚拟机中安装 Go。如需了解详情,请参阅安装 Go
  3. 如需为 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 服务中,从环境变量读取日志级别。日志级别在创建虚拟机期间作为可选输入。默认情况下,可以使用 Info 日志。日志级别如下:

  • DEBUG:记录请求的每个部分,包括 HTTP 请求/响应轨迹。
  • INFO:记录服务启动、服务关闭、请求和其他信息。
  • ERROR:记录请求失败、格式异常和其他错误。

关停提醒

设置服务器以正常关闭并处理正在处理的请求。如需了解如何优雅重启或停止服务器,请参阅优雅重启或停止

并发

Gin 服务器固有地支持使用 Go 协程处理并发请求。默认情况下,Go 例程允许处理不确定数量的请求。不过,在某些情况下,如果请求预计会占用大量资源,请使用工作器池来限制和缓冲服务器上的请求。如需了解详情,请参阅工作器池示例

测试并构建二进制文件

  1. 使用以下命令设置端口并运行服务器:
  2. EXPORT CONNECTOR_ENV_PORT = 8081
    go get .
    go run .

    这些命令会打包所需的库并运行服务器。

  3. 如需验证服务器,请在虚拟机上运行以下 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"
  4. 使用以下命令创建二进制文件并将其用作虚拟机映像:
    go build -o SERVICE_NAME
  5. 使用以下命令将二进制文件移至根文件夹:
    sudo cp SERVICE_NAME /opt
  6. 使用以下命令再次运行服务,以验证二进制文件是否按预期运行:
    sudo chmod +x SERVICE_NAME
    ./SERVICE_NAME

将应用容器化

  1. 安装 Docker。如需了解详情,请参阅安装 Docker
  2. 创建一个 Docker 文件以运行二进制文件。
    FROM alpine:latest
    WORKDIR /opt
    COPY . .
    CMD ["./SERVICE_NAME"]
  3. 使用以下命令构建连接器容器:
    sudo docker build -t connector-container .
  4. 运行 Docker 容器。设置 --restart=unless-stopped 以在发生意外失败时重启服务。

容器级任务

在运行 Docker 容器时,您可以使用 gcplogs 日志驱动程序将标准输出中的所有日志路由到 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

后续步骤