为什么要用mq?
解耦
mq可以解耦合,系统a和其他系统紧耦合,用mq,其他系统可以自己pub/sub
异步化
提高用户体验
削峰
秒杀中用还可以防止系统被打死
消息队列的优点和缺点?
系统的可用性会降低
mq一挂,整个都挂了
系统的复杂性会变高
本来要传一条消息,结果传了两条,或者消息丢掉了
一致性问题
mq对比?
activemq比较成熟,不更新了
rabbitmq延时低,散户更新,活跃度高
rocketmq 10万并发,阿里的,可能会不维护了
kafka用大数据
mq的高可用怎么玩
rabbitmq
- 单机模式
- 普通集群模式:会在rabbitmq内产生大量的信息传输,没有保障可用性
- 镜像模式:通过将数据传到所有的节点,实现高可用
kalfka
用leader和follower,leader会同步数据给follower
mq的中不被重复消费
可以先去内存set里面看一下
数据库里加唯一键
怎么保证消息的可靠性传输
rabbitmq支持消息的事物
生产者那边
try{
发消息
}catch{
channel.txrollback()
再发一次消息
}
没有报错,那么就提交事物
但是这样生产者那边会同步的,所以吞吐量会降下来
rabbitmq的channel里面有comfirm的机制,可以用回调来避免,并且这种是一种异步的方法
rabbitmq那边
让rabbitmq持久化到磁盘上面
消费者那边
把autoACK关掉,自己设置,写完了再ACK
kalfka
如果kalfka挂掉
设置要求kalfka副本至少为1
设置replica参数至少是1个,也就是同步的follower的数量
设置生产者必须要kalfka写成功之后,才能再发消息
设置retry的值
消息队列过期失效怎么办
rabbitmq可以设置消息的过期时间
网友评论