环境准备
- docker-compose
version: '3'services:minio:image: minio/minioports:- "9000:9000"- "19001:19001"environment:MINIO_ACCESS_KEY: minioMINIO_SECRET_KEY: minio123command: server --console-address :19001 --quiet /datalavinmq:image: cloudamqp/lavinmq:1.0.0-beta.8environment:- name=valuevolumes:- ./mq:/var/lib/lavinmqports:- 5672:5672- 15672:15672
- 配置命令
- 配置mc 管理
mc config host add localrong http://127.0.0.1:9000 minio minio123
// 注意一些exchange 以及与队列的关系需要自己配置,注意配置之后需要是需要重启的mc admin config set localrong notify_amqp:s3notifytest \url="amqp://guest:guest@lavinmq:5672/demo" \exchange="s3notify"\exchange_type="direct" \routing_key="arn:minio:sqs::s3notify:amqp" \durable="on" \comment="s3notify"
- 简单说明
实际上通过minio 的console 也可以进行消息通知的配置,但是不能配置名称(多个通知服务),基于mc cli 就可以
格式为notify_amqp:<name>
,这样我们就可以更好的控制消息推送了
参加存储信息
应用监听消息
- 参考app.js 基于nodejs 使用amqplib 包
const amqplib = require('amqplib');// 需要结合实际修改队列信息(async () => {const queue = 'appdemo';const conn = await amqplib.connect('amqp://guest:guest@localhost/demo');
const ch1 = await conn.createChannel();await ch1.assertQueue(queue);
// Listenerch1.consume(queue, (msg) => {if (msg !== null) {console.log('Recieved:', msg.content.toString());ch1.ack(msg);} else {console.log('Consumer cancelled by server');}});
setInterval(() => {// do nothing}, 1000);})();
- 说明
lavinmq部分设计看着是与rabbitmq 不一样的,目前从测试的结果看,如果需要minio 集成lavinmq 成功,exchange 不能先创建,需要配置以及发送数据之后
配置(与队列的关联),否则会提示有异常(目前版本测试),暂时来说lavinmq 兼容性以及稳定性暂时不是特别好,实际如果生产使用建议再等等
参考资料
https://min.io/docs/minio/linux/administration/monitoring/publish-events-to-amqp.html
https://lavinmq.com/
https://min.io/docs/minio/linux/administration/monitoring/bucket-notifications.html
https://min.io/docs/minio/linux/reference/minio-mc/mc-event-add.html#mc-event-supported-events