美文网首页
RabbitMQ 参数属性

RabbitMQ 参数属性

作者: 567f84810acc | 来源:发表于2020-01-13 10:41 被阅读0次

    RabbitMQ

    rabbit message queue的基本概念


    producer:消息生产者,就是投递消息的程序。
    consumer:消息消费者,就是接受消息的程序。

    • Broker: 接收和分发消息的应用,RabbitMQ Server就是Message Broker。

    • Virtual host: 出于多租户和安全因素设计的,把AMQP的基本组件划分到一个虚拟的分组中,类似于网络中的namespace概念。当多个不同的用户使用同一个RabbitMQ server提供的服务时,可以划分出多个vhost,每个用户在自己的vhost创建exchange/queue等。

    • Connection: publisher/consumer和broker之间的TCP连接。断开连接的操作只会在client端进行,Broker不会断开连接,除非出现网络故障或broker服务出现问题。

    • Channel: 如果每一次访问RabbitMQ都建立一个Connection,在消息量大的时候建立TCP Connection的开销将是巨大的,效率也较低。Channel是在connection内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread创建单独的channel进行通讯,AMQP method包含了channel id帮助客户端和message broker识别channel,所以channel之间是完全隔离的。Channel作为轻量级的Connection极大减少了操作系统建立TCP connection的开销。

    • Exchange: message到达broker的第一站,根据分发规则,匹配查询表中的routing key,分发消息到queue中去。常用的类型有:direct (point-to-point), topic (publish-subscribe) and fanout (multicast)。

    • Queue: 消息最终被送到这里等待consumer取走。一个message可以被同时拷贝到多个queue中。

    • Binding: exchange和queue之间的虚拟连接,binding中可以包含routing key。Binding信息被保存到exchange中的查询表中,用于message的分发依据。


    exchange的类型 (交换机)

    生产者并非将消息直接发送到queue,而是发送到exchange中,具体将消息发送到特定的队列还是多个队列,或者是丢弃,取决于exchange的类型

    • direct 直连交换机 (直接交换模式/默认)
    • topic 主题交换机 模糊匹配 routingkey
      ①*(星号)仅代表一个单词
      ②#(井号)代表任意个单词
    • headers 首部交换机 headers与direct的模式不同,不是使用routingkey去做绑定。而是通过消息headers的键值对匹配
    • fanout 扇形交换机 已知的所有队列 相当于广播 速度最快 忽略routingkey

    bind方法将一个队列和一个exchange绑定到一起,第三个参数 routing key,相当于描述这个绑定关系的key,会根据不同类型的exchange,来决定将消息发送到queue中,多个queue中,或者消费时,将消息递送到绑定的queue中

    Queue && arguments 扩展

    queue:声明的队列名称
    durable:是否持久化,是否将队列持久化到mnesia数据库中,有专门的表保存我们的队列声明。
    exclusive:排外,①当前定义的队列是connection的channel是共享的,其他的connection是访问不到的。②当connection关闭的时候,队列将被删除。
    autoDelete:自动删除,当最后一个consumer(消费者)断开之后,队列将自动删除。


    arguments:参数是rabbitmq的一个扩展,功能非常强大,基本是AMPQ中没有的。

    • x-message-ttl:Number ,发布的消息在队列中存在多长时间后被取消(单位毫秒) 可以对单个消息设置过期时间

    • x-expires:Number

    当Queue(队列)在指定的时间未被访问,则队列将被自动删除。

    • x-max-length:Number

    队列所能容下消息的最大长度。当超出长度后,新消息将会覆盖最前面的消息,类似于Redis的LRU算法。

    • x-max-length-bytes:Number

    限定队列的最大占用空间,当超出后也使用类似于Redis的LRU算法。

    • x-overflow:String

    设置队列溢出行为。这决定了当达到队列的最大长度时,消息会发生什么。有效值为Drop Head或Reject Publish。

    • x-dead-letter-exchange:String
      如果消息被拒绝或过期或者超出max,将向其重新发布邮件的交换的可选名称

    • x-dead-letter-routing-key:String

    如果不定义,则默认为溢出队列的routing-key,因此,一般和6一起定义。

    • x-max-priority:Number

    如果将一个队列加上优先级参数,那么该队列为优先级队列。

    1)、给队列加上优先级参数使其成为优先级队列

    x-max-priority=10【值不要太大,本质是一个树结构】

    2)、给消息加上优先级属性

    • x-queue-mode:String

    队列类型  x-queue-mode=lazy  懒队列,在磁盘上尽可能多地保留消息以减少RAM使用;如果未设置,则队列将保留内存缓存以尽可能快地传递消息。

    • x-queue-master-locator:String

    将队列设置为主位置模式,确定在节点集群上声明时队列主位置所依据的规则。

    PHP Laravel : https://packagist.org/packages/bschmitt/laravel-amqp
    Python pika :  https://pika.readthedocs.io/en/stable/
    
    

    字段类型

    Here's a tabular summary of the state of things:
    
      0-9   0-9-1   Qpid/Rabbit  Type               Remarks
    ---------------------------------------------------------------------------
            t       t            Boolean
            b       b            Signed 8-bit
            U       s            Signed 16-bit      (A1)
            u       u            Unsigned 16-bit
      I     I       I            Signed 32-bit
            i       i            Unsigned 32-bit
            L       l            Signed 64-bit      (B)
            l                    Unsigned 64-bit
            f       f            32-bit float
            d       d            64-bit float
      D     D       D            Decimal
            s                    Short string       (A2)
      S     S       S            Long string
            A       A            Array              (C)
      F     F       F            Nested Table
                    x            Byte array         (D)
    
    Remarks:
    
     A1, A2: Notice how the types CONFLICT here. In Qpid and Rabbit,
             's' means a signed 16-bit integer; in 0-9-1, it means a
             short string.
    
     B: Notice how the signednesses CONFLICT here. In Qpid and Rabbit,
        'l' means a signed 64-bit integer; in 0-9-1, it means an unsigned
        64-bit integer.
    
     C: I cannot find any discussion about the addition of this. Is my
        archive missing a few messages?
    
     D: John [O'Hara]objected to this when he proposed his list. I believe it to
        be vital: byte arrays are not strings. Furthermore, Qpid and
        Rabbit already have code deployed that uses this type specifier.
    RabbitMQ continues to use the tags in the third column.
    
    Other notes:
    
    Decimals encoding: "They are encoded as an octet representing the number of places followed by a long signed integer", but the grammar contradicts that and says: "decimal-value = scale long-uint". We treat the decimal value as signed integer.
    

    相关文章

      网友评论

          本文标题:RabbitMQ 参数属性

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