RabbitMQ 備份交換機(alternate-exchange)介紹

RabbitMQ之備份交換機(alternate-exchange)

一、備份交換器,AlternateExchange(AE)

備份交換器是爲了實現沒有路由到隊列的消息,聲明交換機的時候添加屬性alternate-exchange,聲明一個備用交換機,通常聲明爲fanout類型,這樣交換機收到路由不到隊列的消息就會發送到備用交換機綁定的隊列中。python

使用Python的pika包,設置方式是在聲明exchange時,argument的參數中設置alternate-exchange的值,值爲備份交換機的名稱。spa

 

代碼示例:code

#!/usr/bin/env python
import pika

connection = pika.BlockingConnection(pika.ConnectionParameters(host='127.0.0.1', port=5672))
channel = connection.channel()

alternate_exchange = {
    'alternate-exchange': 'backup_exchange'
}

channel.exchange_declare(exchange='topic_logs',
                         exchange_type='topic',
                         arguments=alternate_exchange)

result = channel.queue_declare(exclusive=True)
queue_name = result.method.queue

binding_key = "info.*"
channel.queue_bind(exchange='topic_logs',
                   queue=queue_name,
                   routing_key=binding_key)
print(' [*] Waiting for logs. To exit press CTRL+C')


def callback(ch, method, properties, body):
    print(" [x] %r:%r" % (method.routing_key, body))


channel.basic_consume(callback,
                      queue=queue_name,
                      no_ack=True)

channel.start_consuming()

 

這樣設置聲明,若是交換機topic_logs沒有隊列來接收消息,則消息會被轉發到備份的exchange中。blog

 

二、其餘arguments擴展參數

arguments鍵 意義
x-message-ttl 數字類型,標誌 標誌隊列中的消息存活時間,也就是說隊列中的消息超過了制定時間會被刪除
x-expires 數字類型,標誌 隊列自身的空閒存活時間,當前的queue在指定的時間內,沒有consumer、basic.get也就是未被訪問,就會被刪除。
x-max-length和x-max-length-bytes 數字 最大長度和最大佔用空間,設置了最大長度的隊列,在超過了最大長度後進行插入會刪除以前插入的消息爲本次的留出空間,相應的最大佔用大小也是這個道理,當超過了這個大小的時候,會刪除以前插入的消息爲本次的留出空間。
x-dead-letter-exchange和x-dead-letter-routing-key 字符串 消息由於超時或超過限制在隊列裏消失,這樣咱們就丟失了一些消息,也許裏面就有一些是咱們作須要獲知的。而rabbitmq的死信功能則爲咱們帶來了解決方案。設置了dead letter exchange與dead letter routingkey(要麼都設定,要麼都不設定)那些由於超時或超出限制而被刪除的消息會被推進到咱們設置的exchange中,再根據routingkey推到queue中
x-max-priority 數字 隊列所支持的優先級別,列如設置爲5,表示隊列支持0到5六個優先級別,5最高,0最低,固然這須要生產者在發送消息時指定消息的優先級別,消息按照優先級別從高到低的順序分發給消費者
alternate-exchange   下面簡稱AE,當一個消息不能被route的時候,若是exchange設定了AE,則消息會被投遞到AE。若是存在AE鏈,則會按此繼續投遞,直到消息被route或AE鏈結束或遇到已經嘗試route過消息的AE。
相關文章
相關標籤/搜索