通过RabbitMQ发布Minio事件
介绍
Minio服务器支持以下目标AMQP,Elasticsearch,Redis,nats.io,PostgreSQL和Apache Kafka的Amazon S3兼容存储桶事件通知。本博客系列的第1部分介绍了使用RabbitMQ服务器通过AMQP发送存储桶通知。您可以将此设置与AWS S3&SQS服务进行比较。
配置RabbitMQ的步骤
我在笔记本电脑上使用Ubuntu Linux 16.04,最新的Minio服务器二进制文件和RabbitMQ 3.5.7–1进行了此设置。
安装RabbitMQ服务器并启用管理插件。
$ sudo apt-get install rabbitmq-server $ sudo rabbitmq-plugins enable rabbitmq_management
创建一个名为“ myuser ”的用户,其密码为“ mypassword ”。对于您的生产环境,您可能需要考虑安全性来选择访问凭据。
$ sudo rabbitmqctl add_user myuser mypassword $ sudo rabbitmqctl set_user_tags myuser administrator $ sudo rabbitmqctl set_permissions -p / myuser ".*" ".*" ".*"
配置Minio的步骤
可以从https://minio.io/downloads/下载最新的Minio服务器二进制文件
$ wget https://dl.minio.io/server/minio/release/linux-amd64/minio $ chmod +x minio
在这种情况下,“ myphotos”用作Minio服务器的数据目录。
$ ./minio服务器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中的AMQP配置块。
"amqp": {
"1": {
"enable": true,
"url": "amqp://myuser:mypassword@localhost:5672",
"exchange": "bucketevents",
"routingKey": "bucketlogs",
"exchangeType": "fanout",
"mandatory": false,
"immediate": false,
"durable": false,
"internal": false,
"noWait": false,
"autoDeleted": false
}
} 重新启动Minio服务器以反映上面所做的配置更改。Minio支持RabbitMQ中所有可用的交换。对于此设置,我们使用扇出交换。
使用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:amqp。要了解有关ARN的更多信息,请遵循AWS ARN文档。
$ ./mc mb myminio/images $ ./mc events add myminio/images arn:minio:sqs:us-east-1:1:amqp --suffix .jpg $ ./mc events list myminio/images arn:minio:sqs:us-east-1:1:amqp s3:ObjectCreated:*,s3:ObjectRemoved:* Filter: suffix=”.jpg”
第4步:注意交流活动
下面的python脚本等待队列交换' bucketevents '并在控制台上打印事件通知。它为RabbitMQ使用了pika python客户端库。
#!/usr/bin/env python
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters(
host='localhost'))
channel = connection.channel()
channel.exchange_declare(exchange='bucketevents',
type='fanout')
result = channel.queue_declare(exclusive=False)
queue_name = result.method.queue
channel.queue_bind(exchange='bucketevents',
queue=queue_name)
print(' [*] Waiting for logs. To exit press CTRL+C')
def callback(ch, method, properties, body):
print(" [x] %r" % body)
channel.basic_consume(callback,
queue=queue_name,
no_ack=False)
channel.start_consuming()执行此示例python脚本以在控制台上监视RabbitMQ事件。
$ python rabbit.py
打开另一个终端,然后将JPEG图像上载到“ images ”存储桶中。
$ ./mc cp myphoto.jpg myminio/images
上传完成后,您应该通过RabbitMQ收到以下事件通知。
$ python rabbit.py
‘{“Records”:[{“eventVersion”:”2.0",”eventSource”:”aws:s3",”awsRegion”:”us-east-1",”eventTime”:”2016–09–08T22:34:38.226Z”,”eventName”:”s3:ObjectCreated:Put”,”userIdentity”:{“principalId”:”minio”},”requestParameters”:{“sourceIPAddress”:”10.1.10.150:44576"},”responseElements”:{},”s3":{“s3SchemaVersion”:”1.0",”configurationId”:”Config”,”bucket”:{“name”:”images”,”ownerIdentity”:{“principalId”:”minio”},”arn”:”arn:aws:s3:::images”},”object”:{“key”:”myphoto.jpg”,”size”:200436,”sequencer”:”147279EAF9F40933"}}}],”level”:”info”,”msg”:””,”time”:”2016–09–08T15:34:38–07:00"}\n’您可以使用RabbitMQ官方文档中提供的不同语言绑定来制作自己的脚本。
步骤5:在RabbitMQ上进行测试
使用rabbitmqctl命令行工具测试设置。
$ sudo rabbitmqctl list_exchanges Listing exchanges … direct amq.direct direct amq.fanout fanout amq.headers headers amq.match headers amq.rabbitmq.log topic amq.rabbitmq.trace topic amq.topic topic bucketevents fanout
“ bucketevents fanout”指出已成功创建类型为“ fanout”的RabbitMQ交换。
如有其他问题和意见,请加入我们的Slack聊天室,网址为:http://slack.minio.org.cn/questions