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


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

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

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

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

 

代碼示例:

#!/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中。

 

2、其他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。



 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM