日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

RabbitMQ 入门系列(10)— RabbitMQ 消息持久化、不丢失消息

發(fā)布時間:2023/11/27 生活经验 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RabbitMQ 入门系列(10)— RabbitMQ 消息持久化、不丢失消息 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

消息要保持“持久化”,即不丟失,必須要使得消息、交換器、隊列,必須全部 “持久化”。

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á)隊列呢?

# 打開通道的確認(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ù)自身的路由鍵找到一個符合的隊列,
那么 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 怎么確保消息被消費者消費呢?

在消費確認(rèn)的場景下,RabbitMQ 給消費者發(fā)送消息,消費者接收消息后發(fā)送 Basic.AckRabbitMQ 進(jìn)行消費確認(rèn)。

4. RabbitMQ 又是如何保證消息不丟的呢?

RabbitMQ 主要是采用持久化的方式保證消息不丟,啟用隊列、交換機、消息的持久化,確保不會因為 RabbitMQ 服務(wù)器的宕機導(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)行持久化的。

  • 隊列聲明時持久化例子:
channel.queue_declare(queue='queue_3', durable=True)
  • 交換機聲明初始化;
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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。