1. 安裝rabbitmq,查看官網文檔: https://www.rabbitmq.com/#getstarted
由於我是先安裝了rabbitmq后自己隨手創建了queue,后面又按照官方給的"hello world"例子去測試,結果發生了“406, "PRECONDITION_FAILED - inequivalent arg 'durable'” 這個錯誤信息。
1. 先在管理頁面創建的queue
2. 創建的exchanges
上圖中紅線的 durable 是指是否持久化,可以看到我創建時設置的為true。
3. 官方的hello world 例子:
官網文檔地址:https://www.rabbitmq.com/tutorials/tutorial-one-python.html
代碼(python版本):
(生產者)
(消費者)
但是當我運行上面的代碼時,卻報錯:
錯誤信息翻譯過來大致意思就是:當前的queue的durable屬性是true,但是我們聲明queue時過去的參數確實是false.
這個錯誤造成的原因是現在頁面創建了queue和exchanges,但是代碼中聲明要使用的queue時,durable屬性傳遞的是false.
ok,那么代碼怎么搞了? 可以從pyhton錯誤信息的中的堆棧部分找到返回錯誤的文件:File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pika/adapters/blocking_connection.py"
那么找到這個文件,看看源碼是什么情況:
可以看出來,這個函數里默認durable為false,那么我們將自己的代碼改造一下,設置durable為true.
執行結果:
可以看到是成功了的。
要注意的是,生產者和消費者對queue的聲明函數里,這個durable必須保持一致。