首页 > 编程语言 >RBMQ中python案例一:简单模式

RBMQ中python案例一:简单模式

时间:2023-02-05 15:58:51浏览次数:45  
标签:队列 pika RBMQ python demo queue 案例 melon channel

一、生产者与消费者模式之 简单模式,原理图

 

 

 

二、生产者产生消息

import json
import pika
import datetime

# 生产者 producer.py
def get_message():
    # 产生消息入口处
    for i in range(100):  # 生成10条消息
        message = json.dumps({'id': "10000%s" % i, "amount": 100 * i, "name": "melon", "createtime": str(datetime.datetime.now())})
        producer(message)
        print('i',i)

def producer(message):
    # 获取与rabbitmq 服务的连接,虚拟队列需要指定参数 virtual_host,如果是默认的可以不填(默认为/),也可以自己创建一个
    # 报错StreamLostError: ('Transport indicated EOF',) 是因为将端口 5672 写成 15672
    connection = pika.BlockingConnection(pika.ConnectionParameters(virtual_host='/melon_demo',host='82.156.19.94', port=5672, credentials=pika.PlainCredentials('guest', 'guest')))
    # 创建一个 AMQP 信道(Channel),建造一个大邮箱,隶属于这家邮局的邮箱
    channel = connection.channel()
    # 声明消息队列melon.msg.demo.queue ,消息将在这个队列传递,如不存在,则创建
    channel.queue_declare(queue='melon.msg.demo.queue')
    # 向队列插入数值 routing_key的队列名为melon.msg.demo.queue,body 就是放入的消息内容,exchange指定消息在哪个队列传递,
    # 这里是空的exchange但仍然能够发送消息到队列中,因为我们使用的是我们定义的空字符串exchange(默认的exchange)
    # exchange指定四种模式:direct(默认),fanout, topic, 和headers
    channel.basic_publish(exchange='', routing_key='melon.msg.demo.queue', body=message)
    # 关闭连接
    connection.close()


if __name__ == "__main__":
   get_message()  # 程序执行入口

 

三、消费者消费消息

 

 

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 消费者 receive.py
import time
import pika
# 建立与rabbitmq的连接
credentials = pika.PlainCredentials("guest","guest")
connection = pika.BlockingConnection(pika.ConnectionParameters(virtual_host='/melon_demo',host='82.156.19.94', port=5672,credentials=credentials))
channel = connection.channel()
channel.queue_declare(queue="melon.msg.demo.queue")

def callback(ch,method,properties,body):
    print('body',body)
    time.sleep(100)
    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("melon.msg.demo.queue",callback,True)
# 开始消费,接收消息
channel.start_consuming()

 

标签:队列,pika,RBMQ,python,demo,queue,案例,melon,channel
From: https://www.cnblogs.com/1314520xh/p/17093465.html

相关文章

  • python-pytest.ini介绍
    一、pytest.ini执行方式含义[pytest]addopts=-vsq--html=./report.htmltestpaths=./testConftestpython_files=test*.pypython_classes=Test*python_func......
  • Mac-pycharm执行python3 manage.py makemigrations报错处理
    Mac-pycharm执行python3manage.pymakemigrations报错处理1报错:NameError:name'_mysql'isnotdefined参考:https://blog.csdn.net/weixin_35757704/article/detail......
  • RBMQ案例二:工作队列模式
      工作队列模式工作队列(又名:任务队列)背后的主要思想是避免立即执行资源密集型任务而不得不等待它完成。相反,我们安排任务稍后完成。我们将任务封装为消息并将其发......
  • Python黑客编程之tcp代理
    目的写一款socket代理工具,其实就是在原来两极通信中再加一极,中间极用来转发socket的流量,可以在中间层面实现流量的拦截和篡改代码代理importsocketimportsysim......
  • Spring2 - 入门案例
    Spring基本操作导入依赖在pom.xml中添加依赖添加依赖:<dependencies><!--springcontext依赖--><!--当你引入SpringContext依赖之后,表示将Spring的基础依......
  • python collection Chainmap Counter
    chainmap是一个方便的工具类。它是使用链的方式将多个dict链在一起,并不是真正的生成一个新的dict,从而允许程序可以这获取任意一个dict所包含的所有key对应的value。但是......
  • 整理我遇到的 Python 的疑难问题
    1如果字典里一个键指向一个实例,深拷贝会拷贝出一个新的实例吗?不会:classfoo:def__init__(self):print('doinitfoo')a={'cls':foo()}a#......
  • python 3.python入门
    1.编程语言介绍1.1分类机器语言#机器语言用二进制代码0和1描述的指令称为机器指令,由于计算机内部是基于二进制指令工作的,所以机器语言是直接控制计算......
  • python Listbox插入数据导致GUI崩溃
    提问: 我用windnd模块做了个文件拖入获取路径的功能,想把获取到的路径插入到列表,但是GUI会崩溃,下面是原代码求帮忙看看咋回事importwindndimportthreadingimporttk......
  • python内置函数len()
    len()len()函数用于返回对象(字符串、字节、元组、列表等)的长度(元素个数)len()函数的语法:len(s)代码示例print(len(range(10)))print(len(["1","2","3"]))print(len......