美文网首页
第二章----RabbitMQ基础知识点

第二章----RabbitMQ基础知识点

作者: 枫子夜 | 来源:发表于2019-02-28 17:01 被阅读0次

    1. 消息投递服务(RabbitMQ)

    应用程序从RabbitMQ获取的数据并不是rabbit产生的,就如同你收到的包裹并不是邮局产生的一样,所以说RabbitMQ是一种消息投递服务。

    应用程序可以发送和接受数据,而数据所在的服务器也可以发送和接受数据,RabbitMQ在应用程序和服务器之间扮演着路由器的作用。

    2. 生产者(producer)

    生产者创建消息,然后发送给代理服务器(RabbitMQ),消息包含两部分:数据和标签。数据可以是任意的数据,标签描述了这条消息应该有谁去消费(交换器的名称和可选的主题标记),代理服务器会根据标签发送给感兴趣的接收方。

    3. 消费者(consumer)

    他们链接到代理服务器,并订阅到队列上,每当有消息发送到rabbit,代理服务器就会发送给其中的消费者,消费者只会得到数据那一部分,标签并不会被一同传递。

    这其实就是MQ魅力的所在,生产方和消费方并不知道也不需要关心消息的去处和来源,从而达到了程序间通信的解耦。

    4. 信道(channel)

    生产者和消费者链接RabbitMQ的通道被称为信道。

    在他们之间创建一条TCP链接,应用程序就可以创建一条AMQP的信道,信道是建立在真实TCP链接上的虚拟链接。每条信道都有一个唯一ID,发送消息、订阅队列、消费消息都是由信道传输的。

    在一条TCP链接上可以无限制的创建信道。TCP链接就像一条电缆,而AMQP信道就是一条条独立的光线束。

    RabbitMQ 采用类似NIO' (Non-blocking 1/0) 的做法,选择TCP 连接复用,不仅可以减少性能开销,同时也
    便于管理。

    NIO :也称非阻塞IO , 包含三大核心部分Channel (信道)、Buffer (缓冲区)和Selector (选择器). NIO 基于Channel 和Buffer 进行操作,数据总是从信道读取数据到缓冲区中,或者从缓冲区写入到信道中。Selector 用于监听多个信道的事件(比如连接打开,数据到达等)。因此,单线程可以监听多个数据的信道。

    5. 队列(queue)、绑定(binding)

    队列:是RabbitMQ 的内部对象,用于存储消息,队列是rabbit消息的最后的终点。

    绑定:用于将交换器和队列关联起来。

    6:交换器(exchange )、路由键(routing key)

    消息被发送到交换器上,然后交换器根据路由键规则决定发送到哪些绑定的队列。

    rabbitMQ共有四种类型的交换器:direct、fanout、topic、headers。其中headers允许匹配消息header而不是路由键,其他与direct一致,且没有direct性能高,所以不做介绍。

    • direct
      如果路由键匹配的话,消息就被投递到对应的队列。点对点模式(1: 1)

    • fanout
      把消息并发的发送到每一个绑定在这个交换器上的队列,这就允许你对同一条消息做不同的反应,如果配置了路由键,路由键将不起作用。广播模式(1:N)

    • topic
      多个交换器根据模糊匹配设定的规则,可以把不同类型的消息绑定到同一个队列,(N:1)。

    . 把路由键分成了几部分
    * 匹配一个词
    # 匹配0个或N个词
    

    总结

    1. AMQP架构中最关键的几个要素:交换器、队列、绑定
    2. 根据绑定规则将队列绑定到交换器上
    3. 消息发布到交换器
    4. 交换器类型:direct、fanout、topic
    5. 根据路由键和交换器规则,投递消息到队列
    绑定只是建立了关系,路由键和交换器类型确定最终消息是否发送到队列

    7. 持久化(durable)、事务(transaction)

    持久化: RabbitMQ会将它们写入到一个持久化的日志文件,如果将消息路由到一个非持久化队列,消息将不能被恢复。如果都设置成持久化,性能将大大降低。

    事务: 执行完所有命令才提交,但这样大大降低了性能。建议用:confirm模式(需要将信道设置成确认模式)。发送方确认模式是异步的,也就是说生产者发送完消息之后,一边等待消息的确认一边发送下一个消息,当持久化磁盘之后,通过调用生产者应用的回调来确认收到消息,反之告诉生产者消息丢失。

    8. 消息的一生

    • 生产者:连接到MQ-->获取信道-->声明交换器-->创建消息-->发布消息-->关闭信道-->关闭连接

    • 消费者:连接到MQ-->获取信道-->声明队列-->把队列和交换器绑定起来-->消费消息-->关闭信道-->关闭连接


    欲速则不达

    相关文章

      网友评论

          本文标题:第二章----RabbitMQ基础知识点

          本文链接:https://www.haomeiwen.com/subject/esecuqtx.html