如何使用 celery beat 从 RabbitMQ 队列中安排任务?

问题描述

我正在向“RequestReceiverQueue”RMQ 发布一条消息,我需要将其安排为任务。所以这里发布的消息是可变的,因此如何使用芹菜节拍或替代(如果有)将其设置为计划任务?

应用程序

scheduler_app = Celery(
    "schedulerApp",backend="rpc://",broker="pyamqp://guest:guest@localhost:5672/poc_vhost",include=["workers.tasks"]
)

request_receiver_exchange = Exchange("request_receiver_exchange",type="topic")

scheduler_app.conf.task_queues = (
    Queue(
        'RequestReceiverQueue',exchange=request_receiver_exchange,durable=True,routing_key="workers.tasks.*"
    ),)

workers.tasks.py

from workers.app import scheduler_app

@scheduler_app.task
def execute_request_1(msg):
    print("You are in execute_request_1: ")
    print("processing message: ",msg)


@scheduler_app.task
def execute_request_2(request):
    print("You are in execute_request_2")
    print("Received request is: ",request)

celery beat 配置:这里我需要调度来自“RequestReceiverQueue”队列的传入消息,而不是调度程序配置中定义的 kwargs

scheduler_app.conf.beat_schedule = {
    "task-scheduler-1": {
        "task": "workers.tasks.execute_request_1","schedule": 60.0,"kwargs": {"Msg": "Between 1945 and 1947,Turing lived in Hampton,London."}
    },"task-scheduler-2": {
        "task": "workers.tasks.execute_request_2","kwargs": {"Msg": "Turing worked at the National Physical Laboratory."}
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...