源产品:
祖宗 :JMS
JMS角色: produce、cosume
消息模型:
- 点对点的队列(p2p) ——消费者主动获取队列的消息 ,一个消息只有一个消费者可以消费
- 订阅发布的主题(sub/pub)——主题会广播消息给所有已订阅的消费者,一个消息可以被多个消费者消费
基于JMS发展来的主流如Kafka、RabbitMQ、RokectMQ等
新产品:
JMS类似与JDBC,sun提供接口,由各个厂商(provider)来进行具体的实现。市面上众多成熟的JMS规范实现的框架Kafk,RabbitMQ,ActiveMQ,ZeroMQ,RocketMQ等。
- Kafka
概念图:
## 消费模式:至多、至少、刚好1次
至少1次时考虑幂等性
- RabbitMQ
概念:
- 路由器exchange(direct、fanout、topic、headers)
- 队列queue
- 信道channel
-生产者produce、消费者consumer
- key: routingkey、bindingkey
- 消息入queue保障方式:2种 ,事务机制 或 生产者(producer) confirm 模式
流程:
producer ——routingKey1——>exchange(Type)——bindingKey1——> queue1
bindingKey2——> queue2
bindingKey3——> queue3
不同类型的exchange:
exchange与queue绑定时会设置bindingKey,同样生产者给exchange发消息时也会设置routingKey。
如果Type 是direct模式,只有routingKey和bindingKey完全匹配上的queue才能得到exchange转发的消息。
如果Type 是fanout模式 ,此时生产者发消息时设置的routingKey就没有意义了,因为此时exchange会把其接收到的所有消息广播给与其绑定着的queue们,不管这些其与这些queue的bindingKey到底是啥。
如果Type 是Topic模式 ,一旦routingKey和bindingKey模糊匹配上的queue就能得到exchange转发的消息(类似与like方式进行分类发消息)。
- RokectMQ
参考:
https://blog.csdn.net/canot/article/details/53572400
https://blog.csdn.net/HEYUTAO007/article/details/50131089
补充:
rokect mq 可实现 事务消息:实现类似 X/Open XA 的分布事务功能,以达到事务最终一致性状态。