ydf0509 / funboost

pip install funboost,python全功能分布式函数调度框架,funboost的功能是全面性重量级,用户能想得到的功能99%全都有;funboost的使用方式是轻量级,只有@boost一行代码需要写。支持python所有类型的并发模式和一切知名消息队列中间件,支持如 celery dramatiq等框架整体作为funboost中间件,python函数加速器,框架包罗万象,用户能想到的控制功能全都有。一统编程思维,兼容50% python业务场景,适用范围广。只需要一行代码即可分布式执行python一切函数,99%用过funboost的pythoner 感受是 简易 方便 强劲 强大,相见恨晚 。
Apache License 2.0
682 stars 135 forks source link

【bug】可能存在的bug- 在线急等修复(我就不用再加猴子补丁了~~)[用户自己写法错误问题] #112

Closed xunhanliu closed 6 months ago

xunhanliu commented 6 months ago

测试版本: funboost==43.3 & funboost==24.6 (这中间的几个版本未进行测试) 测试环境: py3.9 RabbitMQ 3.13.1 broker_kind=0

触发方式: 调用:get_publisher 触发调度任务 错误栈:

Job "ocr_process (trigger: date[2024-04-11 13:51:10 CST], next run at: 2024-04-11 13:51:10 CST)" raised an exception
Traceback (most recent call last):
  File "C:\Miniconda3\lib\site-packages\apscheduler\executors\base.py", line 125, in run_job
    retval = job.func(*job.args, **job.kwargs)
  File "C:\Users\EggBro\Desktop\backend\bqvideo_tool_back\module\task\helper\base.py", line 61, in scheduler_start_func
    get_publisher(PublisherParams(queue_name=queue_name, broker_kind=settings.FUNBOOST_BROKER)).publish(kwargs)
  File "C:\Miniconda3\lib\site-packages\funboost\factories\publisher_factotry.py", line 35, in get_publisher
    return broker_kind__publsiher_consumer_type_map[broker_kind][0](publisher_params)
  File "C:\Miniconda3\lib\site-packages\funboost\publishers\base_publisher.py", line 149, in __init__
    self.custom_init()
  File "C:\Miniconda3\lib\site-packages\funboost\publishers\rabbitmq_amqpstorm_publisher.py", line 23, in custom_init
    if self.publisher_params.broker_exclusive_config['x-max-priority']:
KeyError: 'x-max-priority'

建议直接修复方式

    def custom_init(self):
        arguments = {}     #  {'x-queue-type':'classic'} classic stream lazy quorum
        if self.publisher_params.broker_exclusive_config['x-max-priority']:   # 修改成get 获取的方式
            arguments['x-max-priority'] = self.publisher_params.broker_exclusive_config['x-max-priority']
        self.queue_declare_params = dict(queue=self._queue_name, durable=self.DURABLE, arguments=arguments,auto_delete=False)
ydf0509 commented 6 months ago

经测试是没问题的,你发一下funboost版本,和你的精简可复现demo代码贴出来.

ydf0509 commented 6 months ago

x-max-priority 这个一定会存在的,不需要get.

ydf0509 commented 6 months ago

你在手动亲自调用get_publisher?

xunhanliu commented 6 months ago

我明天粘一下相关的代码~~

xunhanliu commented 6 months ago

from funboost import get_publisher,PublisherParams get_publisher(PublisherParams(queue_name="start", broker_kind="RABBITMQ_AMQPSTORM")).publish({})

触发代码只有这两行。

至于自动生成的funboost_config 默认生成的 以及正确配置RABBITMQ连接参数的,都会报第一条评论的错误

ydf0509 commented 6 months ago

为什么要手动使用get_publisher 呢?

ydf0509 commented 6 months ago

不建议用户亲自手动使用get_consumer和get_publisher,跳过了一些步骤,请求boost开始使用

ydf0509 commented 6 months ago

如果你不想用@booost装饰器, image image

如果你不想使用@boost装饰器, 建议按照4.2.c写代码,不要手动使用get_publisher