MQ
MQ:卡夫卡, RocketMQ,RabbitMQ,ActiveMQ
消息队列中间件简介:
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题实现高性能,高可用,可伸缩和最终一致性[架构] 使用较多的消息队列有 ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ
在实际应用中常用的使用场景(作用):异步处理,应用解耦,流量削锋和消息通讯四个场景
RabbitMQ实现原理:
1.直接模式(Direct):消息发给唯一一个节点
任何发送到 Direct Exchange 的消息都会被转发到 RouteKey 中指定的 Queue。
1.一般情况可以使用 rabbitMQ 自带的 Exchange:”"(该 Exchange 的名字为空字符串,下
文称其为 default Exchange)。
2.这种模式下不需要将 Exchange 进行任何绑定(binding)操作
3.消息传递时需要一个“RouteKey”,可以简单的理解为要发送到的队列名字。
4.如果 vhost 中不存在 RouteKey 中指定的队列名,则该消息会被抛弃。
2.分列模式(Fanout):将消息一次发给多个队列
任何发送到 Fanout Exchange 的消息都会被转发到与该 Exchange 绑定(Binding)的所有Queue 上。
1.可以理解为路由表的模式
2.这种模式不需要 RouteKey
3.这种模式需要提前将 Exchange 与 Queue 进行绑定,一个 Exchange 可以绑定多个Queue,一个 Queue 可以同多个 Exchange 进行绑定。
4.如果接受到消息的 Exchange 没有与任何 Queue 绑定,则消息会被抛弃 。
使用步骤:
(1)在 queue 中添加队列 xixi 和 hehe
(2)新建交换器 xuexi
(3)将 xixi 和 hehe两个队列绑定到交换器 xuexi.
3.主题模式(Topic):任何发送到 Topic Exchange 的消息都会被转发到所有关心 RouteKey 中指定话题的 Queue 上(多对一)
ActiveMQ实现原理:
ActiveMQ 消息的传递有两种类型
一种是点对点的,即一个生产者和一个消费者一一对应;
一种是发布/订阅模式,即一个生产者产生消息并进行发送后,可以由多个消费者进行接收。
JMS:主要用于在生产者和消费者之间进行消息传递(ActiveMQ使用)
JMS 定义了五种不同的消息正文格式:
• StreamMessage -- Java 原始值的数据流
• MapMessage--一套名称-值对
• TextMessage--一个字符串对象
• ObjectMessage--一个序列化的 Java 对象
• BytesMessage--一个字节的数据流