Rabbitmq本身是沒有延遲隊列的,要實現延遲消息,一般有兩種方式:
創(chuàng)新互聯專注于祁連企業(yè)網站建設,自適應網站建設,商城網站制作。祁連網站建設公司,為祁連等地區(qū)提供建站服務。全流程按需網站建設,專業(yè)設計,全程項目跟蹤,創(chuàng)新互聯專業(yè)和態(tài)度為您提供的服務1.通過Rabbitmq本身隊列的特性來實現,需要使用Rabbitmq的死信交換機(Exchange)和消息的存活時間TTL(Time To Live)。
2.在rabbitmq 3.5.7及以上的版本提供了一個插件(rabbitmq-delayed-message-exchange)來實現延遲隊列功能。同時插件依賴Erlang/OPT 18.0及以上。
AMQP協議,以及RabbitMQ本身沒有直接支持延遲隊列的功能,但是可以通過TTL和DLX模擬出延遲隊列的功能。
**TTL(Time To Live)**
RabbitMQ可以針對Queue和Message設置 x-message-tt,來控制消息的生存時間,如果超時,則消息變?yōu)閐ead letter
RabbitMQ針對隊列中的消息過期時間有兩種方法可以設置。
A: 通過隊列屬性設置,隊列中所有消息都有相同的過期時間。
B: 對消息進行單獨設置,每條消息TTL可以不同。
如果同時使用,則消息的過期時間以兩者之間TTL較小的那個數值為準。消息在隊列的生存時間一旦超過設置的TTL值,就成為dead letter
詳細可以參考:RabbitMQ之TTL(Time-To-Live 過期時間)
**DLX (Dead-Letter-Exchange)**
RabbitMQ的Queue可以配置x-dead-letter-exchange 和x-dead-letter-routing-key(可選)兩個參數,如果隊列內出現了dead letter,則按照這兩個參數重新路由。
x-dead-letter-exchange:出現dead letter之后將dead letter重新發(fā)送到指定exchange
x-dead-letter-routing-key:指定routing-key發(fā)送
隊列出現dead letter的情況有:
消息或者隊列的TTL過期
隊列達到大長度
消息被消費端拒絕(basic.reject or basic.nack)并且requeue=false
利用DLX,當消息在一個隊列中變成死信后,它能被重新publish到另一個Exchange。這時候消息就可以重新被消費。
了解更多java課程相關技術問題歡迎關注小編!
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧