通过NATS发布Minio活动
介绍
Minio服务器支持以下目标AMQP,Elasticsearch,Redis,nats.io,PostgreSQL和Apache Kafka的Amazon S3兼容存储桶事件通知。本博客系列的第4部分介绍了使用NATS发送存储桶通知。
配置NATS的步骤
我使用了Ubuntu Linux 16.04,gnatsd和nats软件包。它需要安装go软件包,有关安装步骤,请遵循http://docs.minio.org.cn/docs/master/golang-client-api-reference
$ 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的步骤
可以从https://minio.io/downloads/下载最新的Minio服务器二进制文件
$ 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。更新NATS配置块在“config.json”如下
"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 http://localhost:9000 7I6R5G576YI641GS9J9F SuycBIe+O/s5zXxU9w+N4wkXHpBCKa2H6Ptlrc8c
步骤3:设定值区通知
在此示例中,仅当在“ myminio”服务器上的“ images”存储桶中上传或删除JPEG图像时,才启用存储桶事件。这里的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聊天室,网址为:http://slack.minio.org.cn/questions