?xml version="1.0" encoding="UTF-8"?
ActiveMQ:Java语言写的 严格遵守 JMS java message service
RabbitMQ:Erang 非Java系统的首选
ZeroMQ:内存里用的,不支持持久化,金融场景比较多见
RocketMQ:阿里巴巴开源中间件 专门Java系统
Kafka:天生设计为分布式 很方便扩展 超高并发 10w+
第一种:点对点
![](https://img.haomeiwen.com/i14001612/4424a9861fda8251.png)
先进先出
第二种:发布订阅模型
![](https://img.haomeiwen.com/i14001612/9e07c20a6958e75a.png)
启动:
activemqstart
http://localhost:8161 admin admin
消息队列处理消息的主程序就叫Broker
ACK机制
如果broker收到producer的消息,会有一个回传(ack),如果producer没有收到ack,会重新发一遍刚才的消息,如果超过限制的重试次数,会抛异常。
broker发往consumer同理。
![](https://img.haomeiwen.com/i14001612/0e0beef1f8dce075.png)
![](https://img.haomeiwen.com/i14001612/d343ddae1bcbbc4f.png)
幂等:多次调用 结果和一次调用一致
场景:ack回传的时候网络故障,producer重试的时候带一个messageid,就能达到幂等
consumer获取消息有两种方式:
pull:轮询消耗资源,有延迟
push:消息比较及时
消息持久化
kahaDB:消息先存在kahaDB中,如果断线重连就从这里读取
![](https://img.haomeiwen.com/i14001612/55bddbfb96710d58.png)
topic 持久化订阅者 一直保持连接
非持久化订阅者 上线了再发送
activeMQ 高可用
主从:同一时间只有一个在运行,另一个准备状态。不能负载均衡,但一般不会丢失消息
![](https://img.haomeiwen.com/i14001612/8efe41466dd4c490.png)
负载均衡:可能会丢失消息
![](https://img.haomeiwen.com/i14001612/227dacbcdc4e9f33.png)
网友评论