pip3 install pika==1.1.0

官方对于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版本

  centos 6.9 192.168.31.7    mq_01   1核2g    3.8.2centos 6.9 192.168.31.216  mq_02   1核2g    3.8.2centos 6.9 192.168.31.214  mq_03   1核2g    3.8.2ubuntu 16.04   192.168.31.229  mq_client   1核2g    N/A

注意:3台mq服务器,已经开启ssl。开启ssl之后,使用明文传输和使用ssl传输,都是可以的。
生产者#
producer.py

import pikaauth = pika.PlainCredentials('admin', 'admin123')
connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.31.7', '5672', '/', auth))
channel = connection.channel()channel.queue_declare(queue='TEST01')channel.basic_publish(exchange='',routing_key='TEST01',body='Hello World!')
print(" [x] Sent 'Hello World!'")
connection.close()

执行脚本#

python3 produce.py

[x] Sent ‘Hello World!’
消费者#
consumer.py

import pikaauth = pika.PlainCredentials('admin', 'admin123')
connection = pika.BlockingConnection(pika.ConnectionParameters(host='192.168.31.7',port=5672,virtual_host= '/', credentials=auth))
channel = connection.channel()channel.queue_declare(queue='TEST01')def callback(ch, method, properties, body):print(" [x] Received %r" % body)channel.basic_consume(on_message_callback=callback,queue='TEST01',auto_ack=True)

print(’ [*] Waiting for messages. To exit press CTRL+C’)
channel.start_consuming()
执行脚本#

  # python3 consumer.py [*] Waiting for messages. To exit press CTRL+C[x] Received b'Hello World!'

使用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示例代码,编辑配置文件

  git clone https://github.com/Nepitwin/RabbitSSLcd RabbitSSL-master/Pythonvi configuration.py

修改黄色部分

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相关推荐

  1. Windows下RabbitMQ安装及注意事项

    Windows下RabbitMQ安装及注意事项 简介 背景 1.      RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现. Rabbit ...

  2. python连接操作mysql数据库使用详解

    在python3中,有个模块pymysql,用户可以通过这个模块实现远程对mysql数据库的操作. 1.python操作mysql流程架构 2 .python操作mysql使用演示 1.安装并且导入包 ...

  3. 刚安装的python如何使用-python中RabbitMQ的使用(安装和简单教程)

    1,简介 RabbitMQ(Rabbit Message Queue)是流行的开源消息队列系统,用erlang语言开发. 1.1关键词说明: Broker:消息队列服务器实体. Exchange:消息 ...

  4. python操作RabbitMQ

    RabbitMQ介绍 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue)的开源实现的产品,RabbitMQ是一个消息代理,从"生产者" ...

  5. python连接oracle导出数据文件

    python连接oracle,感觉table_list文件内的表名,来卸载数据文件 主脚本: ''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 寻找有志同道合的小 ...

  6. Python——Python连接MySQL数据库

    基本概念 PyMySQL:PyMySQL是封装了MySQL驱动的Python驱动,一个能使Python连接到MySQL的库. mysql-connector-python(MySQL Connecto ...

  7. python rabitmq_python RabbitMQ队列使用

    原博文 2019-01-17 21:17 − python RabbitMQ队列使用 关于python的queue介绍 关于python的队列,内置的有两种,一种是线程queue,另一种是进程queu ...

  8. PHP 连接 Rabbitmq 实例代码(亲测通过)

    接下来我们用 php 连接 rabbitmq 玩一玩. 还没有安装 rabbitmq ,请参考 Rabbitmq 安装 还没有安装 PHP 的 AMQP 扩展,参考 PHP AMQP 扩展安装 一些概 ...

  9. Python菜鸟之路:Python基础-Python操作RabbitMQ

    RabbitMQ简介 rabbitmq中文翻译的话,主要还是mq字母上:Message Queue,即消息队列的意思.rabbitmq服务类似于mysql.apache服务,只是提供的功能不一样.ra ...

最新文章

  1. SecureCRT自动化脚本
  2. CSS3 background-image背景图片相关介绍
  3. 构建针对 iOS 和 Android 的原生扩展
  4. dac0832产生梯形波程序C语言,在8086系统中用DAC0832输出一个三角波,一个梯形波,和一个正弦波。...
  5. java cache详解,Java内存缓存详解
  6. ISSET_SE 错误异常
  7. java获取接口数据类型_java中调用第三方接口获取数据的方式
  8. gradle生命周期
  9. 基于scikit-learn机器学习库的分类预测
  10. java activity模式_Activity的启动模式
  11. gdb调试多进程和多线程
  12. python第三方库介绍和安装
  13. 【OPPO主题制作系列 - 01】-- 写个小工具自动打包Theme文件
  14. NC63重写导出功能
  15. XEQ玻尿酸敏感肌可以用吗?效果怎么样?
  16. 小米笔记本电脑的SN码如何查找?
  17. 关于zip压缩包日志查询、统计、导出
  18. Axure RP Extension for Chrome 安装插件
  19. 数据科学总纲:欲练此功,必过此纲
  20. byte数据类,list数据类

热门文章

  1. 为什么分布式一定要有redis,redis的一些优缺点
  2. 2022年考研结束了
  3. 这样给数组初始化,你肯定没有见过
  4. Linux select/poll机制原理分析
  5. 把输入字符的小写转换成大写并输出
  6. mysql通过局域网访问数据库_MySQL数据库之局域网内访问同一个mysql数据库
  7. vs2019新建android生成app,VS2017 VS2019创建离线安装包
  8. wget python3_python wget
  9. python 查询sqlserver 视图_SQL Server查看视图定义总结
  10. LeetCode 1832. 判断句子是否为全字母句