【问题标题】:Specify a format to store data in rabbitMQ message queue指定rabbitMQ消息队列中数据的存储格式
【发布时间】:2023-02-09 08:42:25
【问题描述】:

我使用 RabbitMQ 作为消息代理,使用 Celery 作为任务队列来处理我的队列内容。让我们举一个基本的例子,我们想要添加两个数字 x 和 y。

我将共享任务创建为:

任务.py

from celery import shared_task

@shared_task
def add(x, y):
    return x + y

我看到当我将内容推送到队列时,数据存储为

(myprojectenv) root@ubuntu-s-1vcpu-1gb-blr1-02:/etc/myproject# python manage.py shell
Python 3.8.10 (default, Mar 15 2022, 12:22:08)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from myproject.tasks import add
>>> add.delay(5, 5)
<AsyncResult: 88f4d5c2-f68a-42c1-acda-d64593df1899>

但是我希望我的数据以不同的格式存储,比如

{operation : 'add', listOfNumbers : [5, 5]}

如何更改将数据实际推入队列的方式?在获取相同内容的同时,我可以获得字典并解压缩值并进行处理

【问题讨论】:

  • 你试图做的事情毫无意义。该格式是内部的,特定于 Celery。任何更改都将导致 Celery worker 无法执行任务。如果你想编写一些工具来处理 RabbitMQ 中的内容,你需要了解 Celery/Kombu 如何使用 JSON 格式序列化任务(其他格式也是可能的,例如我最喜欢的 MsgPack)。
  • 那么它以什么格式存储数据呢?总是列表格式?共享任务的函数定义类型将指定接收什么?是吗?
  • 您需要深入研究 Celery/Kombu 源代码以了解它们如何对任务进行 JSON 序列化……人们实际上不需要知道这一点,这就是为什么 Celery 人员没有在 Celery 文档中添加任何内容。

标签: python rabbitmq celery message-queue system-design


【解决方案1】:

{ “任务”:“myapp.tasks.add”, “id”:“54086c5e-6193-4575-8308-dbab76798756”, “参数”:[4, 4], “kwargs”:{} }

【讨论】:

    猜你喜欢
    • 2013-08-09
    • 2013-05-17
    • 2014-12-09
    • 2022-10-08
    • 2018-01-29
    • 2012-10-21
    • 2023-04-08
    • 1970-01-01
    • 2016-04-27
    相关资源
    最近更新 更多