RabbitMQ

2019-03-26  本文已影响0人  起个名忒难
队列对比
队列 ActiveMq RabbitMq RocketMQ Kafka
性能 6000+ 12000+ 10万+ 百万
多语言支持 支持 支持 支持 支持
社区活跃度
综合评价 成熟,性能较弱缺乏大规模吞吐场景的应用 性能较好,社区活跃管理界面丰富 内部机制很难了解,难定制 模型简单。接口易用,文档少,支持语言少 天生分布式,性能最好,运维难度大
使用docker进行安装
docker run -d --name rabbitmq3.7.7 -p 5672:5672 -p 15672:15672 -v `pwd`/data:/var/lib/rabbitmq --hostname myRabbit -e RABBITMQ_DEFAULT_VHOST=my_vhost  -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 rabbitmq:3.7.13-management
问题

发送端产生消息重复的主要原因是:消息成功写入消息存储后,因为各种原因使得消息发送端没有收到成功的返回结果,并且进行重试,因而导致的重复。
消息接收端消息重复的主要原因是:消息接收者成功处理完消息后,消息中间件不能及时更新投递状态造成。

如何保证数据的可靠性传输

实际项目中遇到的问题:

消费方的业务处理时间可能比较长,最好采用多线程和多consumer进行消费。

程序实现

发送方

此处说下callback和returncallbakc的执行时机:
消息没有到达exchange,则confirm回调,ack=false
消息到达exchange,则confirm回调,ack=false
exchange到queue成功,则不回调returnCallBack。
exchange到queue失败,则回调returnCallBack,在回调confirmCallBack.需设置mandatory=true,否则不回回调,消息就丢了

上面为封装后对外开放的接口,可为此方法编写重载方法。对外只暴露 泛型参数T

消费方推荐使用多线程进行处理。

上一篇 下一篇

猜你喜欢

热点阅读