通过 NATS 发布 MinIO 事件
介绍
Minio 服务器支持与 Amazon S3 兼容的存储桶事件通知,以用于以下目标:AMQP、Elasticsearch、Redis、nats.io、PostgreSQL 和 Apache Kafka。本博文系列的第 4 部分介绍如何使用 NATS 发送存储桶通知。
配置 NATS 的步骤
我使用了 Ubuntu Linux 16.04、gnatsd 和 nats 包。它需要安装 go 包,有关安装步骤,请遵循 https://docs.minio.io/docs/how-to-install-golang
$ go get github.com/nats-io/gnatsd
$ go get github.com/nats-io/nats
启动 NATS 服务器。
$ gnatsd --user yourusername --pass yoursecret
[1510] 2016/10/12 06:14:48.706544 [INF] Starting nats-server version 0.9.4
[1510] 2016/10/12 06:14:48.707441 [INF] Listening for client connections on 0.0.0.0:4222
[1510] 2016/10/12 06:14:48.708332 [INF] Server is ready
配置 Minio 的步骤
最新的 Minio 服务器二进制文件可以从 https://minio.io/downloads/ 下载
$ wget https://dl.minio.io/server/minio/release/linux-amd64/minio
$ chmod +x minio
In this case “myphotos” is used as my data directory for Minio server.
$ ./minio server myphotos
Endpoint: http://10.1.10.150:9000 http://127.0.0.1:9000
AccessKey: 7I6R5G576YI641GS9J9F
SecretKey: SuycBIe+O/s5zXxU9w+N4wkXHpBCKa2H6Ptlrc8c
Region: us-east-1
...
...
Minio 服务器配置文件的默认位置是 *~/.minio/config.json*。在 *‘config.json’* 中更新 NATS 配置块,如下所示
"nats": {
"1": {
"enable": true,
"address": "0.0.0.0:4222",
"subject": "bucketevents",
"username": "yourusername",
"password": "yoursecret",
"token": "",
"secure": false,
"pingInterval": 0
}
},
重新启动 Minio 服务器以反映上述配置更改。*“bucketevents”* 是本示例中 NATS 使用的 *主题*。
使用 Minio 客户端启用存储桶通知
步骤 1:下载并安装 Minio 客户端
$ wget https://dl.minio.io/client/mc/release/linux-amd64/mc
$ chmod 755 mc
步骤 2:添加 Minio 服务器主机别名信息
使用指向 Minio 服务器的访问密钥和秘密密钥配置 Minio 客户端。
$ ./mc config host add myminio https://:9000 7I6R5G576YI641GS9J9F SuycBIe+O/s5zXxU9w+N4wkXHpBCKa2H6Ptlrc8c
步骤 3:设置存储桶通知
在本示例中,我们只会在将 JPEG 图像上传或从 *‘images’* 存储桶(位于 *‘myminio’* 服务器上)删除时启用存储桶事件。这里的 ARN 值为 *arn:minio:sqs:us-east-1:1:nats.*。要详细了解 ARN,请遵循 AWS ARN 文档。
$ ./mc mb myminio/images
$ ./mc events add myminio/images arn:minio:sqs:us-east-1:1:nats --suffix .jpg
$ ./mc events list myminio/images
arn:minio:sqs:us-east-1:1:nats s3:ObjectCreated:*,s3:ObjectRemoved:* Filter: suffix=”.jpg”
步骤 4:在 NATS 上进行测试
使用以下程序,我们可以记录添加到 NATS 的存储桶通知。
package main
// Import Go and NATS packages
import (
"runtime"
"log"
"github.com/nats-io/nats"
)
func main() {
// Create server connection
natsConnection, _ := nats.Connect("nats://yourusername:yoursecret@localhost:4222")
log.Println("Connected")
// Subscribe to subject
log.Printf("Subscribing to subject 'bucketevents'\n")
natsConnection.Subscribe("bucketevents", func(msg *nats.Msg) {
// Handle the message
log.Printf("Received message '%s\n", string(msg.Data) + "'")
})
// Keep the connection alive
runtime.Goexit()
}
$ go run nats.go
2016/10/12 06:39:18 Connected
2016/10/12 06:39:18 Subscribing to subject 'bucketevents'
打开另一个终端,并将 JPEG 图像上传到“*images*”存储桶。
$ ./mc cp myphoto.jpg myminio/images
在运行 *nats.go* 程序的终端下方,控制台中会打印事件通知。
$ go run nats.go
2016/10/12 06:51:26 Connected
2016/10/12 06:51:26 Subscribing to subject 'bucketevents'
2016/10/12 06:51:33 Received message '{"EventType":"s3:ObjectCreated:Put","Key":"images/myphoto.jpg","Records":[{"eventVersion":"2.0","eventSource":"aws:s3","awsRegion":"us-east-1","eventTime":"2016-10-12T13:51:33Z","eventName":"s3:ObjectCreated:Put","userIdentity":{"principalId":"minio"},"requestParameters":{"sourceIPAddress":"[::1]:57106"},"responseElements":{},"s3":{"s3SchemaVersion":"1.0","configurationId":"Config","bucket":{"name":"images","ownerIdentity":{"principalId":"minio"},"arn":"arn:aws:s3:::images"},"object":{"key":"myphoto.jpg","size":56060,"eTag":"1d97bf45ecb37f7a7b699418070df08f","sequencer":"147CCD1AE054BFD0"}}}],"level":"info","msg":"","time":"2016-10-12T06:51:33-07:00"}
如有更多疑问和评论,请加入我们的 Slack 聊天:https://slack.minio.io