python 连接 rabbitMQ以及rabbitMQssl注意事项,password

  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 结束脚本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/478333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 887. 鸡蛋掉落(DP,难、不懂)

1. 题目 你将获得 K 个鸡蛋&#xff0c;并可以使用一栋从 1 到 N 共有 N 层楼的建筑。 每个蛋的功能都是一样的&#xff0c;如果一个蛋碎了&#xff0c;你就不能再把它掉下去。 你知道存在楼层 F &#xff0c;满足 0 < F < N 任何从高于 F 的楼层落下的鸡蛋都会碎&…

正确的LeetCode刷题姿势!

名师 带你刷爆LeetCode算法知识 讲解训练免费0元报名参加在讲到 AI 算法工程师时&#xff0c;大部分同学关注点都在高大上的模型&#xff0c;一线优秀的项目。但大家往往忽略了一点&#xff0c;人工智能的模型、项目最终还是要靠程序和算法实现。算法能力是每一个程序员的基本功…

论文浅尝 | DI刊发的那些有关Knowledge Graph的论文

本文转载自公众号&#xff1a;数据智能英文刊知识图谱被称为人工智能的基石&#xff0c;它的前身是语义网&#xff0c;由谷歌在2012年率先提出&#xff0c;用于改善自身的搜索业务。Data Intelligence执行主编、东南大学计算机科学与技术学院漆桂林教授这样定义知识图谱&#x…

缓存那些事

本文已发表于《程序员》杂志2017年第3期&#xff0c;下面的版本又经过进一步的修订。 一般而言&#xff0c;现在互联网应用&#xff08;网站或App&#xff09;的整体流程&#xff0c;可以概括如图1所示&#xff0c;用户请求从界面&#xff08;浏览器或App界面&#xff09;到网络…

浅析消息队列 RabbitMQ

浅析消息队列 RabbitMQhttps://www.pianshen.com/article/4275953257/

LeetCode 42. 接雨水(双指针、单调栈)

文章目录1. 题目2. 解题2.1 正反扫描法2.2 双指针2.3 单调栈1. 题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图&#xff0c;在这种情况下&am…

论文浅尝 - IJCAI | Knowledge is NOT always you need: 外部知识注入预训练模型的利与弊...

转载公众号 | 浙大KG论文题目&#xff1a;Drop Redundant, Shrink Irrelevant: Selective Knowledge Injection for Language Model Pretraining本文作者&#xff1a;张宁豫&#xff08;浙江大学&#xff09;、邓淑敏&#xff08;浙江大学&#xff09;、张亦弛&#xff08;阿里…

圆形的CNN卷积核?华中大清华康奈尔提出圆形卷积,进一步提升卷积结构性能!...

文 | 小马编 | 极市平台写在前面目前正常卷积的感受野大多都是一个矩形的&#xff0c;因为矩形更有利于储存和计算数据的方便。但是&#xff0c;人类视觉系统的感受野更像是一个圆形的。因此&#xff0c;作者就提出&#xff0c;能不能将CNN卷积核的感受野也变成圆形呢&#xff…

Android自定义Lint实践

Android Lint是Google提供给Android开发者的静态代码检查工具。使用Lint对Android工程代码进行扫描和检查&#xff0c;可以发现代码潜在的问题&#xff0c;提醒程序员及早修正。 为保证代码质量&#xff0c;美团在开发流程中加入了代码检查&#xff0c;如果代码检测到问题&…

关于PaddleNLP如何加载训练好的模型进行NER

关于PaddleNLP如何加载训练好的模型进行NER 关于PaddleNLP如何加载训练好的模型进行NER 当时在如何加载已经训练好的模型的问题上花了很长时间&#xff0c;后来也是受另一篇文章启发&#xff0c;问题才得以解决&#xff0c;此文章写的很详细&#xff0c;所以不再详细介绍&#…

论文浅尝 | 利用机器翻译和多任务学习进行复杂的知识图谱问答

笔记整理 | 谭亦鸣&#xff0c;东南大学博士生。来源&#xff1a;EACL‘21链接&#xff1a;https://www.aclweb.org/anthology/2021.eacl-main.300.pdf概述知识图谱问答过程一般包括实体链接&#xff0c;多跳推理等步骤&#xff0c;传统方法将各个步骤作为模块单独处理&#xf…

LeetCode 134. 加油站(贪心)

文章目录1. 题目2. 解题1. 题目 在一条环路上有 N 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车&#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发&#xff0c;开始时油箱为空。 …

诺奖级成果开源!为什么说AlphaFold2足以改变全人类?

文 | 炼丹学徒编 | 小轶前天&#xff0c;AlphaFold2开源&#xff0c;相信大家被大大小小的公众号刷屏了。谷歌Deepmind团队此前使用基于Transformer的模型&#xff0c;在CASP14比赛上&#xff0c;刷新蛋白质三维结构预测的新高度&#xff0c;而详细论文&#xff0c;代码&#x…

美团外卖前端可视化界面组装平台 —— 乐高

乐高&#xff0c;是美团点评一个快速搭建后台系统页面的平台。名称来源于大家熟悉的丹麦知名玩具品牌&#xff0c;他们的玩具都是通过组合易拆卸、装配的零件&#xff0c;形成最终的作品。经过长期的发展&#xff0c;乐高品牌渐渐有了“快乐、想象、创意的未来”的寓意。 随着外…

[Paddle2.0学习之第四步](下)词向量之CBOW

[Paddle2.0学习之第四步]&#xff08;下&#xff09;词向量之CBOW&#xff1a;https://blog.csdn.net/qq_41976613/article/details/118977184

论文浅尝 | 主题驱动的分子图表示对比学习

笔记整理 | 方尹&#xff0c;浙江大学在读博士&#xff0c;研究方向&#xff1a;图表示学习。论文地址&#xff1a;https://arxiv.org/abs/2012.12533动机与贡献现有的对比学习框架中可能存在以下几个弊端&#xff1a;1.把节点看成一种视图&#xff0c;在节点和图之间进行对比学…

LeetCode 931. 下降路径最小和(DP)

文章目录1. 题目2. 动态规划解题1. 题目 给定一个方形整数数组 A&#xff0c;我们想要得到通过 A 的下降路径的最小和。 下降路径可以从第一行中的任何元素开始&#xff0c;并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列。 示例&#xff1a; 输…

到2021年,目前深度学习领域有哪些除了调模型以外的硬核研究工作和进展?

文 | 刘斯坦&#xff0c;电光幻影炼金术源 | 极市平台作为一个未入门的研究生小白&#xff0c;一方面为深度学习的实际效果和应用价值而感到兴奋&#xff0c;另一方面也会担忧自己的个人能力的发展。个人目前浅薄的看法是&#xff0c;调模型的强应用向的研究工作&#xff0c;由…

美团点评SQL优化工具SQLAdvisor开源

在数据库运维过程中&#xff0c;优化 SQL 是 DBA 团队的日常任务。例行 SQL 优化&#xff0c;不仅可以提升程序性能&#xff0c;还能够降低线上故障的概率。 目前常用的 SQL 优化方式包括但不限于&#xff1a;业务层优化、SQL逻辑优化、索引优化等。其中索引优化通常通过调整索…