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--一个字节的数据流

 

posted @ 2018-10-28 10:10  ng-xixi  阅读(353)  评论(0编辑  收藏  举报