zoukankan      html  css  js  c++  java
  • 图解rabbitmq

    消息队列可以实现流量削峰、降低系统耦合度、提高系统性能等。

    RabbitMQ是一个实现了AMQP协议(Advanced Message Queue Protocol)的消息队列。

    AMQP简介

    Amqp是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件同产品,不同的开发语言等条件的限制。

     

    rabbitmq 有哪些重要的组件?

     

    • ConnectionFactory(连接管理器):应用程序与Rabbit之间建立连接的管理器,程序代码中使用。
    • Channel(信道):消息推送使用的通道。
    • Exchange(交换器):用于接受、分配消息。
    • Queue(队列):用于存储生产者的消息。
    • RoutingKey(路由键):用于把生成者的数据分配到交换器上。
    • BindingKey(绑定键):用于把交换器的消息绑定到队列上。

    RabbitMQ中的概念

    • producer: producer 是一个发送消息的应用
    • exchange:producer 并不会直接将消息发送到 queue 上,而是将消息发送给 exchange,由 exchange 按照一定规则转发给指定queue
    • queue: queue 用来存储 producer 发送的消息
    • consumer: consumer是接收并处理消息的应用

    RabbitMQ运作原理

    RabbitMQ消息传递(单个队列):

    RabbitMQ消息传递(多个队列)

    多个Queue的场景中,消息会被Exchange按一定的路由规则分发到指定的Queue中去

    • 生产者指定Message的routing key,并指定Message发送到哪个Exchange
    • Queue会通过binding key绑定到指定的Exchange
    • Exchange根据对比Message的routing key和Queue的binding key,然后按一定的分发路由规则,决定Message发送到哪个Queue

    每一类Exchange都有自己的分发路由规则:

    Fanout Exchange:忽略key对比,发送Message到Exchange下游绑定的所有Queue

    Direct Exchange:比较Message的routing key和Queue的binding key,完全匹配时,Message才会发送到该Queue

     

    Topic Exchange:比较Message的routing key和Queue的binding key,按规则匹配成功时,Message才会发送到该Queue

    • routing key命名规则:用"."分割的字母或数字
    • 匹配规则
      • *:匹配单个字母或数字
      • #:匹配0~多个字母或数字
      • 比如:*.stock.#与usd.stock、eur.stock.db匹配;但与stock.nasdaq不匹配

     

    默认Exchange:比较Message的routing key和Queue的名字,完全匹配时,Message才会发送到该Queue

     

    RabbitMQ控制台

    RabbitMQ控制台可以:

    • 创建Queue
    • 创建Exchange
    • 通过binding key绑定Queue到Exchage
    • 发送消息到Exchange
    • 从Queue接收消息
    • 其他运维监控功能
  • 相关阅读:
    linux系统缓存机制
    信号“未决”与“阻塞”
    异步I/O
    Unix下五种IO模型
    【设计模式
    【设计模式
    【设计模式
    【设计模式
    【设计模式
    【设计模式
  • 原文地址:https://www.cnblogs.com/fan-1994716/p/11950827.html
Copyright © 2011-2022 走看看