MinIO 提供与一系列后端系统的集成,使您能够为您的项目构建完整的解决方案。团队最近集成了来自社区的拉取请求以添加 Webhook 支持,并希望向您介绍一下。
首先,我们将了解什么是 Webhook,它们可以与哪些系统连接的一些示例,然后逐步演示如何使用 MinIO 配置缩略图生成器的端到端示例。
Webhook 是互联网上 API 通信的事实标准。从技术角度来说,Webhook 是服务器应用程序以包含 JSON 有效负载的 HTTP POST 方式向另一个系统发送通知。要在您自己的应用程序中使用 MinIO Webhook,您只需要创建一个 HTTP/s 端点并编辑您的 ~/.minio/config.json
文件。
在这篇文章中,我们将重点介绍一个用例,即无需轮询即可近乎实时地自动创建缩略图。
MinIO 的其他 Webhook 用途:
- 调用 AWS Lambda 函数
- 启动持续集成 (CI)
- 通过 Slack、Flowdock 或 HipChat 通知您的团队
Webhook 的优势
直到最近,通过 HTTP 从 MinIO 获取事件的唯一方法是轮询,这意味着在您的计算机上创建一个长时间运行的任务,以循环检查是否有新消息。轮询有其优点,因为它易于设置且不需要 HTTP 端点,但它也可能浪费资源。
设计良好的 API 允许其用户实时接收事件流,并且现在 MinIO 正式支持:NATS、Kafka、Redis、PostgreSQL 和 Webhook (HTTP/s)。有关通知范围的更多信息,请查看文档:MinIO 通知文档。
用例:缩略图生成器
在我们继续探索如何配置您的 Webhook 端点之前,让我们先讨论一个常见的用例。
假设您的团队将照片以全分辨率上传到您的服务器,但这些照片需要调整大小以生成用于在线目录的缩略图。MinIO 开发人员 Harsha 使用 Node.js 创建了一个名为 Thumbnailer 的示例项目。它侦听具有“.jpg”文件扩展名的 S3 put 事件,然后获取、调整大小并重新上传关联的文件。
1. 安装 Thumbnailer
打开终端,然后为代码创建两个新的桶并安装“thumbnailer”。(您还需要 git
和 nodejs
)
$ mc mb myminio/images
$ mc mb myminio/images-processed
$ git clone https://github.com/minio/thumbnailer/
$ npm install
在启动 thumbnailer 代码之前,我们需要编辑 config/default.json
中的配置文件。添加服务器的配置,然后启动代码。
2. 启动 Thumbnailer
$ NODE_ENV=webhook node thumbnail-webhook.js
Webhook listening on all interfaces at port 3000!
3. 为您的 Minio 服务器配置 Webhook ARN
MinIO 的服务器组件通过 ~/.minio/config.json
中的文件进行配置——在这里您可以配置支持的队列或通知系统之一。我们将编辑此文件并添加我们的 HTTP/s 端点,但首先请确保您正在运行最新版本的 MinIO 服务器和客户端。
编辑您的 ~/.minio/config.json
文件并添加以下部分
"webhook": {
"1": {
"enable": true,
"endpoint": "http://localhost:3000/"
}
端点可以设置为网络或互联网上的任何站点和 TCP 端口,并使用 HTTP 或 HTTPs 方案。当您重新/启动 MinIO 服务器时,端点需要处于活动状态且可访问。
4. 实际操作
为 Webhook ARN 设置通知
$ mc events add myminio/images arn:minio:sqs:us-east-1:1:webhook — events put — suffix .jpg
在单独的终端中,将 .jpg 照片上传到 MinIO 实例上的 images 桶。
$ mc cp san-francisco.jpg myminio/images
等待片刻,然后使用 mc ls
检查桶的内容——您将在 images-processed 桶中看到一个缩略图。
$ mc ls myminio/images-processed
san-francisco-thumbnail.jpg
交给你了
您可能已经在您的应用程序中使用了许多 Webhook。MinIO 现在使您能够近乎实时地获取有关 S3 桶上活动状态的通知。
您可以立即使用 Docker 测试 MinIO
docker run minio/minio
访问 项目主页 以获取更多说明。如果您想了解更多信息或只是建立联系,请加入下方 Slack 社区的团队