fcfangcc / pyxxl

XXL-JOB的Python执行器实现,可以方便的将Python方法注册到XXL-JOB的调度中心上进行管理
https://fcfangcc.github.io/pyxxl/
GNU General Public License v3.0
60 stars 16 forks source link

app.run_executor() 未自动注册executor到xxljob #43

Closed KunxiSun closed 7 months ago

KunxiSun commented 7 months ago

问题描述

我看README里是说,支持注册执行器executor和任务task到xxljob里去,但我在使用example代码里发现了以下两个问题

问题1:未自动注册executor到xxljob 问题2:未自动注册task到xxljob

步骤

第一步:复制的example文件夹里的示例代码 第二步:修改了配置,添加了access_token 第三步:运行程序:python scheduled.py 第三步:发现executor无法自动注册到xxljob

后续: 但是通过在xxljob后台手动注册executor和手动添加task后,是可以调用的到executor里的任务。

# scheduled.py

import asyncio
import time

from pyxxl import ExecutorConfig, PyxxlRunner
from pyxxl.ctx import g

config = ExecutorConfig(
    executor_app_name="my_service_name",
    access_token='my_access_token',
    xxl_admin_baseurl="http://172.16.5.31:8080/xxl-job-admin/api/",
    executor_host="172.16.2.19",               # 本机内网IP
    executor_port=8081,                            # 本机开放端口
    # executor_listen_host="0.0.0.0",  # xxl-admin监听时绑定的host
    debug=False
)

app = PyxxlRunner(config)

@app.register(name="测试任务1")
async def test_task():
    # you can get task params with "g"
    g.logger.info("get executor params: %s" % g.xxl_run_data.executorParams)
    for i in range(10):
        g.logger.warning("test logger %s" % i)
    await asyncio.sleep(5)
    return "成功..."

@app.register(name="测试任务2")
async def test_task3():
    await asyncio.sleep(3)
    return "成功3"

@app.register(name="测试任务3")
async def test_task4():
    # 如果要在xxl-admin上看到执行日志,打印日志的时候务必用g.logger来打印,默认只打印info及以上的日志
    n = 1
    g.logger.info("Job %s get executor params: %s" % (g.xxl_run_data.jobId, g.xxl_run_data.executorParams))
    # 如果同步任务里面有循环,为了支持cancel操作,必须每次都判断g.cancel_event.
    while n <= 10 and not g.cancel_event.is_set():
        g.logger.info(
            "log to {} logger test_task4.{},params:{}".format(
                g.xxl_run_data.jobId,
                n,
                g.xxl_run_data.executorParams,
            )
        )
        time.sleep(2)
        n += 1
    return "成功3"

if __name__ == "__main__":
    app.run_executor()

版本

KunxiSun commented 7 months ago

已解决,第一次使用xxljob

解决方式:

步骤1: 先去xxl job 后台:http://<xxl-job地址>/xxl-job-admin 步骤2:自动添加1个执行器

app = PyxxlRunner(config) app.run_executor()