调度作业批处理导致 SQL 截断错误

问题描述

Laravel v8 Redis 队列与地平线 多租户应用

在控制器中,我尝试使用 Bus-Facade 启动批处理。

            $batch = Bus::batch([
                new \App\Jobs\RemoveSalesrep(1),new \App\Jobs\RemoveSalesrep(1)
            ])->finally(function (Batch $batch) {
                echo "Job done".PHP_EOL;
            })->name('Remove Salesrep')
                ->dispatch()
            ;

我收到此错误

{
    "message": "sqlSTATE[01000]: Warning: 1265 Data truncated for column 'id' at row 1 (sql: insert into `job_batches` (`id`,`name`,`total_jobs`,`pending_jobs`,`Failed_jobs`,`Failed_job_ids`,`options`,`created_at`,`cancelled_at`,`finished_at`) values (92b2c9ba-6d69-430f-9bf1-16752905a9c4,Delete_Salesrep,[],a:1:{s:7:\"finally\";a:1:{i:0;C:36:\"Illuminate\\Queue\\SerializableClosure\":274:{@W90beNUagraW+tkpzPDZUu3Hw1tomK8ByTsnw/n9uWg=.a:5:{s:3:\"use\";a:0:{}s:8:\"function\";s:59:\"function (\\Illuminate\\Bus\\Batch $batch) {\n                }\";s:5:\"scope\";s:40:\"App\\Http\\Controllers\\AssetDataController\";s:4:\"this\";N;s:4:\"self\";s:32:\"000000003be0a0070000000036f37ab4\";}}}},1612965862,?,?))","exception": "Illuminate\\Database\\QueryException","file": "/var/www/clients/client0/web13/web/vendor/laravel/framework/src/Illuminate/Database/Connection.PHP","line": 678,"trace": [
        {
            "file": "/var/www/clients/client0/web13/web/vendor/laravel/framework/src/Illuminate/Database/Connection.PHP","line": 638,"function": "runQueryCallback","class": "Illuminate\\Database\\Connection","type": "->"
        },{
            "file": "/var/www/clients/client0/web13/web/vendor/laravel/framework/src/Illuminate/Database/Connection.PHP","line": 472,"function": "run","line": 424,"function": "statement",{
            "file": "/var/www/clients/client0/web13/web/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.PHP","line": 2838,"function": "insert",{
            "file": "/var/www/clients/client0/web13/web/vendor/laravel/framework/src/Illuminate/Bus/DatabaseBatchRepository.PHP","line": 99,"class": "Illuminate\\Database\\Query\\Builder",{
            "file": "/var/www/clients/client0/web13/web/vendor/laravel/framework/src/Illuminate/Bus/PendingBatch.PHP","line": 226,"function": "store","class": "Illuminate\\Bus\\DatabaseBatchRepository",{
            "file": "/var/www/clients/client0/web13/web/app/Http/Controllers/AssetDataController.PHP","line": 218,"function": "dispatch","class": "Illuminate\\Bus\\PendingBatch",{
            "file": "/var/www/clients/client0/web13/web/vendor/laravel/framework/src/Illuminate/Routing/Controller.PHP","line": 54,"function": "removeSalesrep","class": "App\\Http\\Controllers\\AssetDataController",{
            "file": "/var/www/clients/client0/web13/web/vendor/laravel/framework/src/Illuminate/Routing/Controllerdispatcher.PHP","line": 45,"function": "callAction","class": "Illuminate\\Routing\\Controller",{
            "file": "/var/www/clients/client0/web13/web/vendor/laravel/framework/src/Illuminate/Routing/Route.PHP","line": 254,"class": "Illuminate\\Routing\\Controllerdispatcher","line": 197,"function": "runcontroller","class": "Illuminate\\Routing\\Route",{
            "file": "/var/www/clients/client0/web13/web/vendor/laravel/framework/src/Illuminate/Routing/Router.PHP","line": 692,{
            "file": "/var/www/clients/client0/web13/web/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.PHP","line": 128,"function": "Illuminate\\Routing\\{closure}","class": "Illuminate\\Routing\\Router",{
            "file": "/var/www/clients/client0/web13/web/app/Http/Middleware/UserData.PHP","line": 118,"function": "Illuminate\\Pipeline\\{closure}","class": "Illuminate\\Pipeline\\Pipeline","line": 167,"function": "handle","class": "App\\Http\\Middleware\\UserData",{
            "file": "/var/www/clients/client0/web13/web/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.PHP","line": 41,"class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",{
            "file": "/var/www/clients/client0/web13/web/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.PHP","line": 44,"class": "Illuminate\\Auth\\Middleware\\Authenticate",{
            "file": "/var/www/clients/client0/web13/web/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrftoken.PHP","line": 78,"class": "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrftoken",{
            "file": "/var/www/clients/client0/web13/web/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.PHP","line": 49,"class": "Illuminate\\View\\Middleware\\ShareErrorsFromSession",{
            "file": "/var/www/clients/client0/web13/web/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.PHP","line": 121,"line": 63,"function": "handleStatefulRequest","class": "Illuminate\\Session\\Middleware\\StartSession",{
            "file": "/var/www/clients/client0/web13/web/vendor/stancl/tenancy/src/Middleware/IdentificationMiddleware.PHP","line": 36,{
            "file": "/var/www/clients/client0/web13/web/vendor/stancl/tenancy/src/Middleware/InitializeTenancyByDomain.PHP","line": 38,"function": "initializeTenancy","class": "Stancl\\Tenancy\\Middleware\\IdentificationMiddleware","class": "Stancl\\Tenancy\\Middleware\\InitializeTenancyByDomain",{
            "file": "/var/www/clients/client0/web13/web/vendor/stancl/tenancy/src/Middleware/PreventAccessFromCentralDomains.PHP","line": 29,"class": "Stancl\\Tenancy\\Middleware\\PreventAccessFromCentralDomains",{
            "file": "/var/www/clients/client0/web13/web/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.PHP","line": 37,"class": "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse",{
            "file": "/var/www/clients/client0/web13/web/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.PHP","line": 67,"class": "Illuminate\\Cookie\\Middleware\\EncryptCookies","line": 103,"line": 694,"function": "then","line": 669,"function": "runRouteWithinStack","line": 635,"function": "runRoute","line": 624,"function": "dispatchToRoute",{
            "file": "/var/www/clients/client0/web13/web/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.PHP","line": 166,"function": "Illuminate\\Foundation\\Http\\{closure}","class": "Illuminate\\Foundation\\Http\\Kernel",{
            "file": "/var/www/clients/client0/web13/web/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.PHP","line": 21,"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",{
            "file": "/var/www/clients/client0/web13/web/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.PHP","line": 27,"class": "Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize",{
            "file": "/var/www/clients/client0/web13/web/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.PHP","line": 86,"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",{
            "file": "/var/www/clients/client0/web13/web/vendor/fruitcake/laravel-cors/src/HandleCors.PHP","class": "Fruitcake\\Cors\\HandleCors",{
            "file": "/var/www/clients/client0/web13/web/vendor/fideloper/proxy/src/TrustProxies.PHP","line": 57,"class": "Fideloper\\Proxy\\TrustProxies","line": 141,"line": 110,"function": "sendRequestThroughRouter",{
            "file": "/var/www/clients/client0/web13/web/public/index.PHP","line": 53,"type": "->"
        }
    ]
} 

如果我通过像这样在队列中简单地分派它来启动与单个作业相同的作业

\App\Jobs\RemoveSalesrep::dispatch($salesrep['id'],$jobConfig)->onConnection('redis')->onQueue('default');

处理得非常好。

在另一个控制器文件中,我正在使用 Bus::batch 方法并且不会出现该错误。什么可能导致该跟踪中的 sql 语句损坏?我尝试了一个空的新创建的工作 - 结果相同。似乎与工作本身无关。

不得不提的是,这发生在“租户”控制器中。我将此软件包用于多租户应用。

https://tenancyforlaravel.com/docs/v3/introduction/

解决方法

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

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

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