python 连接 rabbitMQ以及rabbitMQssl注意事项,password
官方對于pika有如下介紹#
Since threads aren’t appropriate to every situation, it doesn’t require threads.
Pika core takes care not to forbid them, either.
The same goes for greenlets, callbacks, continuations, and generators.
An instance of Pika’s built-in connection adapters isn’t thread-safe, however.
線程并不適用于每種場景, 因此并不要求使用線程。 但是pika并不禁用線程, 對于
greenlets, callbacks也一樣。 一個pika建立的連接并不是線程安全的
因此在多線程中共享一個pika連接不是線程安全的, 當然也有一種使用:
with one exception: you may call the connection method add_callback_threadsafe from
another thread to schedule a callback within an active pika connection.
使用add_callback_threadsafe方法callback 一個pika連接從另外一個線程中
pika提供建立連接方式:#
pika.adapters.asyncio_connection.AsyncioConnection - 用于python 3 AsyncIO的I/O異步模式pika.BlockingConnection - 同步模式, 簡單易用pika.SelectConnection - 沒有第三方依賴包的異步模式pika.adapters.tornado_connection.TornadoConnection - 基于Tornado 的異步IO請求模式pika.adapters.twisted_connection.TwistedProtocolConnection - 基于Twisted’的異步IO請求模式二、普通版rabbitmq#
環境說明
操作系統 ip 主機名 配置 rabbitmq版本
注意:3臺mq服務器,已經開啟ssl。開啟ssl之后,使用明文傳輸和使用ssl傳輸,都是可以的。
生產者#
producer.py
執行腳本#
python3 produce.py
[x] Sent ‘Hello World!’
消費者#
consumer.py
print(’ [*] Waiting for messages. To exit press CTRL+C’)
channel.start_consuming()
執行腳本#
使用CTRL+C 結束腳本
三、SSL版rabbitmq#
客戶端采用的是ubuntu 16.04,因為發現centos 7.6編譯python 3.7時,導入ssl報錯,無法解決。
ubuntu 16.04可以解決導入ssl模塊問題。
ubuntu 16.04安裝python3-openssl
apt-get install -y python3-openssl
生產者#
下載github示例代碼,編輯配置文件
修改黃色部分
import pika import sslssl_opts = {"ca_certificate": "ca_certificate.pem","client_certificate": "client_certificate.pem","client_key": "client_key.pem","cert_reqs": ssl.CERT_REQUIRED,"ssl_version": ssl.PROTOCOL_TLSv1_2 }rabbit_opts = {"host": "192.168.31.7","port": 5671,"user": "admin","password": "admin123", }rabbit_queue_opts = {"queue": "python_ssl","message": "Hello SSL World :)" }context = ssl.create_default_context(cafile=ssl_opts["ca_certificate"])忽略證書驗證
context = ssl._create_unverified_context()context.load_cert_chain(ssl_opts["client_certificate"], ssl_opts["client_key"]) ssl_options = pika.SSLOptions(context, rabbit_opts["host"]) parameters = pika.ConnectionParameters(host=rabbit_opts["host"],port=rabbit_opts["port"],credentials=pika.PlainCredentials(rabbit_opts["user"], rabbit_opts["password"]),ssl_options=ssl_options) 注意:由于證書是不受信任的,因此必須要關閉證書驗證,否則會運行報錯,提示證書驗證失敗! 執行腳本#**
context.load_cert_chain(ssl_opts["client_certificate"], ssl_opts["client_key"]) 一定要添加參數password,否則代碼就會一直卡在等你輸入密碼。終端會提醒你輸入密碼還好,直接運行代碼是不提醒的。
context.load_cert_chain(ssl_opts["client_certificate"], ssl_opts["client_key"], *password='bunnies'*)**
python3 rabbitssl_send.py
[x] Sent 'Hello SSL World :)!'消費者#
執行腳本
python3 rabbitssl_consume.py
[*] Waiting for messages. To exit press CTRL+C[x] Received b'Hello SSL World :)'使用CTRL+C 結束腳本
總結
以上是生活随笔為你收集整理的python 连接 rabbitMQ以及rabbitMQssl注意事项,password的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python 捕获异常
- 下一篇: python 实现组合数