首页 > 编程语言 >Python_消息队列

Python_消息队列

时间:2023-11-03 18:11:53浏览次数:40  
标签:rabbitpy Python rabbitmq RabbitMQ queue 队列 消息 message channel

rabbitpy: RabbitMQ Simplified

###[scheme]://[username]:[password]@[host]:[port]/[virtual_host]
  url = 'amqp://guest:guest@localhost:5672/%2F'
  这个%2f是字符斜杠/ uni-encode之后的结果,而/就是默认的hostname,它在HTTP传输的时候必须要转义。

 Port 15672 is for the management panel and is open for connections from a different machine.
    通过 http://serverip:15672 访问 RabbitMQ 的 Web 管理界面,默认用户名密码都是 guest
 Port 5672 is for applications and can only be accessed from the internal network.

部署:

1.安装erlang 语言
   由于rabbitMQ是erlang语言实现的,所以我们需要安装erlang

   sudo apt-get install erlang-nox
   
   查看版本: erl -version

2.安装rabbitMQ
  安装最新版rabbitMQ
   sudo apt-get install rabbitmq-server


3.查看rabbitMQ状态,active(running)表示在线
    sudo systemctl status rabbitmq-server 

服务端命令

rabbitmqctl 用来管理RabbitMQ中间件的命令行工具.它通过连接中间件节点来执行所有操作	
     rabbitmqctl 命令,查看队列信息,所包含的信息包括 name,arguments, messages,memory
用户管理
  注意rabbitmqctl 管理RabbitMQ 内部用户数据库. 任何来自其它认证后端的用户对于rabbitmqctl来说是不可见的.	
	 
 sudo  rabbitmqctl list_queues
 rabbitmqctl cluster_status 
  获取 RabbitMQ Server 状态 命令为 rabbitmqctl status  
 
 rabbitmq-plugins list 
   rabbitmq-plugins 是管理RabbitMQ broker插件的命令行	 
 
  后台管理界面是以插件的形式需要用户手动安装,不像activemq启动后后台管理服务也自动启动可直接访问,
   rabbitmq 后台管理界面访问http://localhost:15672	 

开启后台管理页面

    要在浏览器中访问 RabbitMQ,需要使用 RabbitMQ 的 Web 界面插件。可以按照以下步骤安装和配置:
    1. 安装 RabbitMQ Web 插件:
    sudo rabbitmq-plugins enable rabbitmq_management
    
    2. 重启 RabbitMQ 服务:
    sudo systemctl restart rabbitmq-server
    
    3. 确认 Web 界面已经启用:
    sudo rabbitmq-plugins list
	在生产环境中,应该限制对 RabbitMQ 管理插件的访问,并使用HTTPS来保护您的数据

生产者

import rabbitpy 

url = 'amqp://guest:[email protected]:30595/%2F'

connection = rabbitpy.Connection(url)
channel = connection.channel()
###声明一个exchange,指定channel名称
exchange = rabbitpy.Exchange(channel, 'chapter2-example')
####使用declare方法来发送Exchange.Declare命令
exchange.declare()
####建立队列,指定队列名称
queue = rabbitpy.Queue(channel, 'example')
###发送Queue.Declare命令,会返回(此队列中的消息数,此队列的消费者数)
queue.declare() 
###绑定队列到exchange# 会发送Queue.Bind命令,传入exchange和路由key
queue.bind(exchange, 'example-routing-key')

####下面就可以发送消息了
for message_number in range(10):
    message = rabbitpy.Message(channel, # 指定channel                               
	                        f'Test message {message_number}', # 消息体                             
	                        {'content_type':'text/plain'}, # 消息属性(字典)                             
	                        opinionated=True)    

创建Basic.Public方法帧(frame),消息头帧,和一个消息体帧,然后传输到RabbitMQ

message.publish(exchange, 'example-routing-key')

代码

import rabbitpy,datetime
###[scheme]://[username]:[password]@[host]:[port]/[virtual_host]
url = 'amqp://guest:guest@localhost:5672/%2F'
with rabbitpy.Connection(url) as connection:
    with connection.channel() as channel:
        exchange = rabbitpy.Exchange(channel, 'chapter4-example')
        exchange.declare()
        channel.enable_publisher_confirms() # 开启发布确认
        body = 'This is an important message'
        message = rabbitpy.Message(channel, body,                          
                                   {'content_type': 'text/plain','message_type': 'very important'}
								   )
        if message.publish('chapter4-example','important.message'):
            print('The message was confirmed')
 ### DirectExchange  FanoutExchange  HeadersExchange  TopicExchange
 ### bind  declare delete unbind

消费者

import rabbitpy
with rabbitpy.Connection() as conn:
    with conn.channel() as channel:
        amqp = rabbitpy.AMQP(channel)
        for message in amqp.basic_consume('queue-name'):
            print(message)
#### basic_get  basic_cancel  basic_nack  basic_publish

with conn.channel() as channel:
    queue = rabbitpy.Queue(channel, 'example')
    for message in queue.consume():
        print 'Message: %r' % message
        message.ack()
		
		
import rabbitpy
with rabbitpy.Connection('amqp://guest:guest@localhost:5672/%2f') as conn:
    with conn.channel() as channel:
        queue = rabbitpy.Queue(channel, 'example')
        while len(queue) > 0:
            message = queue.get()
            message.pprint(True)
            message.ack()
            print('There are {} more messages in the queue'.format(len(queue)))			

rabbitpy.Queue

#queue = rabbitpy.Queue(channel, 'my-queue')

参考

 https://blog.csdn.net/yjw123456/article/details/118756425	
  https://rabbitpy.readthedocs.io/en/latest/api/channel.html

标签:rabbitpy,Python,rabbitmq,RabbitMQ,queue,队列,消息,message,channel
From: https://www.cnblogs.com/ytwang/p/17808136.html

相关文章

  • Python分享之内置函数清单
    Python内置(built-in)函数随着python解释器的运行而创建。在Python的程序中,你可以随时调用这些函数,不需要定义。最常见的内置函数是:print("HelloWorld!")在Python教程中,我们已经提到下面一些内置函数:基本数据类型type()反过头来看看dir()help()len()词典len()文本文......
  • Python之openpyxl模块的学习
    简介之前针对Excel的读取都是使用的xlrd模块,但是在一次实践中发现xlrd模块去掉了对xlsx格式的支持,因此改用openpyxl。以下内容仅包含使用openpyxl读取Excel文档的操作,并且比较浅显,更多内容请参考官方文档。注:一个excel就是一个工作簿(workbook),一个工作簿含有多个工作表(sheet)实......
  • python训练阿里云语音合成模型
    训练阿里云多人训练语音合成模型model_link:https://modelscope.cn/models/speech_tts/speech_sambert-hifigan_tts_zh-cn_multisp_pretrain_24k/summary1.获取KANTTS算法训练框架2.配置虚拟环境(conda)需要下载pytorch及其他kantts算法依赖3.数据准备:https://modelsco......
  • Rabbitmq消息队列:Topic话题模式简单应用
    一、生产者声明topic话题模式的交换机,分别发送几条消息到不同的路由key。packagetest.topic;importcom.rabbitmq.client.Channel;importcom.rabbitmq.client.Connection;importutils.RabbitmqConUtil;publicclassGive{//定义交换机privatefinals......
  • Python_web开发基础内容
    网络长连接的HTTP协议,会在响应头有加入这个头部字段:Connection:keep-aliveWebSocket:需要通过网络传输的任何实时更新或连续数据流,则可以使用WebSocketHTTP:不需要很频繁或仅获取一次的数据可以通过简单的HTTP请求查询都是用来跟踪浏览器用户身份的会话方式.cookie......
  • Python-运算符
    Python-运算符1.Python运算符的优先级以下表格列出了从最高到最低优先级的所有运算符:如果是同优先级则从左往右依次递减运算符描述**乘方,指数(最高优先级)~+-按位翻转,一元加号和减号(最后两个的方法名为+@和-@)*/%//乘,除,取模和取整除+-......
  • Python 中的 __init__.py 和__all__ 详解(抄袭的joker) 因为写的实在是太好了
    Python中的__init__.py和__all__详解JOKER没意思先生 之前不论是自己写代码还是用别人的代码,都没有注意过这个东西,今天忽然看了一下,网上的教程感觉讲的都不是很清楚,自己又研究了研究,总结一下,如果有不对的地方,大家帮忙指正一下。在Python工程里,当pyth......
  • C语言 循环队列
    什么是队列队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。什么是循环队列在实际使用队列时,为了使队列空间能重复使用,往往对......
  • python 中[1:]、[:-1]和[::-1]
    代码分析:str='abcdefg'print(str[1:])print(str[:-1])print(str[-1:])print(str[::-1])print(str[::-2])print(str[:])-------------------------------------------------------------------------------------------结果bcdefgabcdefggfedcbagecaabcdefg1234567......
  • [Python] 基于 flask 构建 Web API 实现参数注入和校验
    在python中,flask包是一个轻量级的WEB框架,常用于快速构建HTTP服务。但它并没有提供参数校验和注入的功能。习惯了java等高级编程语言开发webapi的同学,应该都不想每定义一个api都要写很多代码去做校验和获取请求参数吧,至少我是这样。幸运的是,已经有人提供了参数校验相......