flask实现使用装饰器完成rabbitmq消费队列

flask实现使用装饰器完成rabbitmq消费队列

​ 在python中最常使用的rabbitmq库应该是pika,但是一般使用pika时都是一个py文件为一个消费者,需要全部手动启动。那么如何做到像java的Springboot一样可以直接使用注解完成消费者队列的监听,这里使用到的一个第三方库是flask_rabbitmq。

1、安装并简单使用flask_rabbitmq库

添加库跟普通的库什么区别

命令:pip install flask_rabbitmq

安装完成后,可以去pushyzheng/flask-rabbitmq: A simple Python Flask combined with RabbitMQ pika library (github.com)中的example/consumer文件夹下查看例子具体怎么使用

在flask大致的使用过程:

  • 创建一个和app目录的目录结构一样包,包括init.py和demo.py(可以复制过来再修改文件名)
  • 在config.py配置rabbitmq地址和账号密码
  • 在同级的app/demo进行队列的配置和消费之代码的编写
  • 最后启动run.py就可以了

2、根据自己的需要修改源码

以上仅仅只是最简单是使用,可以根据自己的业务场景和需要修改源码,这里我看了一下源码,因为比较简单,所以我对源码进行了一些修改,具体修改了一下地方

1、将RabbitMQ.py的run和run_with_flask_app注释

因为项目中不只是集成rabbitmq,还有其他工具,因此为了确保所有的配置都能够在run.py下配置,将这两个启动方法注释(不注释也可以,总之不要调用这个启动函数)

RabbitMQ.py

run.py
在这里插入图片描述
2、RabbitMQ.py注释run函数的self._channel.queue_declare(queue=queue_name, auto_delete=True)这一行代码

由于我的队列一开始就创建好了,这里只需要充当消费者,所以在初始化的时候,并不需要创建队列,否则会报错。
在这里插入图片描述
3、最后我在RabbitMQ.py的类中添加了应答函数

我发现示例中并没有应答,处理完消息之后队列中会出现 Unacked,因此自己添加了个应答调用的函数

    def basic_ack(self, delivery_tag):
        self._channel.basic_ack(delivery_tag)

在这里插入图片描述

使用示例:

from message_queue import mq, queue
@queue(queue="sum_queue")
def sum_queue(ch, method, props, body):
   print("sum_queue => {}".format(body))
   mq.basic_ack(delivery_tag=method.delivery_tag)

当然,应答方式有改变也可以根据实际情况进行修改

最后:修改源码的方式并不建议直接在原库修改,pycharm可以在Lib/site-packages下将其复制出来在项目中再进行修改,否则换个环境就不起作用了。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
RabbitMQ 延迟队列可以通过以下几个步骤来实现: 1. 安装 RabbitMQ 插件:rabbitmq_delayed_message_exchange 在 RabbitMQ 中,延迟队列可以通过使用插件 rabbitmq_delayed_message_exchange 来实现。首先需要安装该插件,可以通过以下命令进行安装: ``` rabbitmq-plugins enable rabbitmq_delayed_message_exchange ``` 2. 创建延迟交换机 创建一个用于延迟消息的交换机,类型为 x-delayed-message,可以通过以下命令进行创建: ``` rabbitmqadmin declare exchange name=<exchange_name> type=x-delayed-message arguments='{"x-delayed-type": "direct"}' ``` 其中,<exchange_name> 为交换机名称。 3. 创建队列 创建一个普通的队列,用于存储消息,可以通过以下命令进行创建: ``` rabbitmqadmin declare queue name=<queue_name> ``` 其中,<queue_name> 为队列名称。 4. 绑定队列和交换机 将队列绑定到延迟交换机上,可以通过以下命令进行绑定: ``` rabbitmqadmin declare binding source=<exchange_name> destination=<queue_name> routing_key=<routing_key> ``` 其中,<routing_key> 为路由键。 5. 发送延迟消息 发送一条延迟消息,可以通过以下代码进行实现: ```python import pika import time connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() # 设置延迟时间,单位为毫秒 delay_time = 5000 # 设置消息体 message = 'Hello, RabbitMQ!' # 设置消息属性,用于指定延迟时间 properties = pika.BasicProperties( headers={ 'x-delay': delay_time } ) # 发送消息 channel.basic_publish( exchange='<exchange_name>', routing_key='<routing_key>', body=message, properties=properties ) print(f'[x] Sent "{message}" with {delay_time}ms delay') connection.close() ``` 其中,需要设置消息属性 headers,用于指定延迟时间。 6. 接收延迟消息 接收延迟消息,可以通过以下代码进行实现: ```python import pika connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() # 定义回调函数 def callback(ch, method, properties, body): print(f'[x] Received "{body.decode()}"') # 接收消息 channel.basic_consume( queue='<queue_name>', on_message_callback=callback, auto_ack=True ) print('[*] Waiting for messages. To exit press CTRL+C') channel.start_consuming() connection.close() ``` 在接收消息时,可以通过回调函数获取消息体。 以上就是实现 RabbitMQ 延迟队列的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值