RabbitMQ 入门系列(10)— RabbitMQ 消息持久化、不丢失消息
生活随笔
收集整理的這篇文章主要介紹了
RabbitMQ 入门系列(10)— RabbitMQ 消息持久化、不丢失消息
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
消息要保持“持久化”,即不丟失,必須要使得消息、交換器、隊(duì)列,必須全部 “持久化”。
1. 生產(chǎn)者怎么確認(rèn) RabbitMQ 已經(jīng)收到了消息?
# 打開通道的確認(rèn)模式
channel.confirm_delivery()msg_props = pika.BasicProperties()
msg_props.content_type = 'text/plain'message = "hello world"
# message = '{"a": 1, "b": 2}'
# basic_publish 中的 routing_key 叫做路由鍵
ack = channel.basic_publish(exchange='ex_2', routing_key='abc.123',
properties=msg_props, body=message)if ack:print "send msg successful"
else:print "send msg failed"
2. RabbitMQ 怎么告知生產(chǎn)者消息已經(jīng)到達(dá)隊(duì)列呢?
# 打開通道的確認(rèn)模式
channel.confirm_delivery()msg_props = pika.BasicProperties()
msg_props.content_type = 'text/plain'message = "hello world"
# message = '{"a": 1, "b": 2}'
# basic_publish 中的 routing_key 叫做路由鍵
ack = channel.basic_publish(
exchange='ex_2', routing_key='abc.123',
mandatory=True, properties=msg_props, body=message)
'''
當(dāng) mandatory 參數(shù)設(shè)置為 true 時,交換機(jī)無法根據(jù)自身的路由鍵找到一個符合的隊(duì)列,
那么 RabbitMQ 會調(diào)用 Basic.Return 命令將消息返回給生產(chǎn)者,
當(dāng) mandatory 參數(shù)設(shè)置為 false 時,出現(xiàn)上述情況,消息會被丟棄。
'''
if ack:print "send msg successful"
else:print "send msg failed"
channel.close()connect.close()
3. RabbitMQ 怎么確保消息被消費(fèi)者消費(fèi)呢?
在消費(fèi)確認(rèn)的場景下,RabbitMQ 給消費(fèi)者發(fā)送消息,消費(fèi)者接收消息后發(fā)送 Basic.Ack 給 RabbitMQ 進(jìn)行消費(fèi)確認(rèn)。
4. RabbitMQ 又是如何保證消息不丟的呢?
RabbitMQ 主要是采用持久化的方式保證消息不丟,啟用隊(duì)列、交換機(jī)、消息的持久化,確保不會因?yàn)?RabbitMQ 服務(wù)器的宕機(jī)導(dǎo)致消息丟失。
# pika.BasicProperties(delivery_mode=2消息持久化
ack = channel.basic_publish(exchange='ex_2', routing_key='abc.123', mandatory=True, properties=pika.BasicProperties(delivery_mode=2, ), body=message
)
properties=pika.BasicProperties(delivery_mode=2, ) 即可表示消息是要進(jìn)行持久化的。
- 隊(duì)列聲明時持久化例子:
channel.queue_declare(queue='queue_3', durable=True)
- 交換機(jī)聲明初始化;
channel.exchange_declare(exchange='ex_2', exchange_type='direct', passive=False, durable=True,auto_delete=False
)
各個函數(shù)的詳細(xì)參數(shù)含義請參考以下文章:
RabbitMQ 入門系列(9)— Python 的 pika 庫常用函數(shù)及參數(shù)說明
總結(jié)
以上是生活随笔為你收集整理的RabbitMQ 入门系列(10)— RabbitMQ 消息持久化、不丢失消息的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 又没有死侍2百度云资源?
- 下一篇: 740多少钱啊?