ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python与RabbitMQ交互

2022-02-10 19:31:25  阅读:272  来源: 互联网

标签:pika python RabbitMQ queue 队列 credentials 交互 channel


单发送单接收 - 生产者消费者模型 

python消息队列:
线程queue(同一进程之间进行交互)
进程queue(父子进程进行交互或同一个进程下的多个子进程进行交互)

两个完全独立的python程序:

是不能用上面的queue进行交互的,或者和其他语言交互的方式有哪些呢?

1.Disk:可以把数据写入磁盘
2.Socket通信
3.消息中间件:RabbitMQ,ZeroMQ,ActiveMQ等。
生产者send.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pika
# 创建凭证,使用rabbitmq用户密码登录 # 去邮局取邮件,必须得验证身份
credentials = pika.PlainCredentials("admin","123456")
# 新建连接,这里localhost可以更换为服务器ip # 找到这个邮局,等于连接上服务器
connection = pika.BlockingConnection(pika.ConnectionParameters(‘10.0.0.61‘,credentials=credentials))
# 创建频道 # 建造一个大邮箱,隶属于这家邮局的邮箱,就是个连接
channel = connection.channel()
# 声明一个队列,用于接收消息,队列名字叫“水许传”
channel.queue_declare(queue=‘SH‘)
# 注意在rabbitmq中,消息想要发送给队列,必须经过交换(exchange),初学可以使用空字符串交换(exchange=‘‘),
# 它允许我们精确的指定发送给哪个队列(routing_key=‘‘),参数body值发送的数据
channel.basic_publish(exchange=‘‘, routing_key=‘SH‘, body=‘武松又去打老虎啦2‘)
print("已经发送了消息")
# 程序退出前,确保刷新网络缓冲以及消息发送给rabbitmq,需要关闭本次连接
connection.close()
消费者receive.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import pika
# 建立与rabbitmq的连接
credentials = pika.PlainCredentials("admin","123456")
connection = pika.BlockingConnection(pika.ConnectionParameters(‘10.0.0.61‘,credentials=credentials))
channel = connection.channel()
channel.queue_declare(queue="SH")

def callback(ch,method,properties,body):
    print("消费者接收到了任务:%r"%body.decode("utf8"))
    # 有消息来临,立即执行callback,没有消息则夯住,等待消息
    # 老百姓开始去邮箱取邮件啦,队列名字是水许传
# def basic_consume(self,
#                       queue,
#                       on_message_callback,
#                       auto_ack=False,
#                       exclusive=False,
#                       consumer_tag=None,
#                       arguments=None):
# 这个参数的调用有所改动
# 第一个参数是队列
# 第二个是回调函数
# 第三个这是auto_ack=True
channel.basic_consume("SH",callback,True)
# 开始消费,接收消息
channel.start_consuming()

标签:pika,python,RabbitMQ,queue,队列,credentials,交互,channel
来源: https://blog.csdn.net/weixin_42322206/article/details/122654545

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有