使用lavinmq 做为minio amqp 消息服务
环境准备
- docker-compose
version: '3'
services:
minio:
image: minio/minio
ports:
- "9000:9000"
- "19001:19001"
environment:
MINIO_ACCESS_KEY: minio
MINIO_SECRET_KEY: minio123
command: server --console-address :19001 --quiet /data
lavinmq:
image: cloudamqp/lavinmq:1.0.0-beta.8
environment:
- name=value
volumes:
- ./mq:/var/lib/lavinmq
ports:
- 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);
// Listener
ch1.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