laravel 使用異步隊列,context帶的上下文造成反序列化出問題

2025年5月8日17:03:44
如果你是單個應用,異步遞交任務,是在應用內部使用,一般不會發生這樣的問題

但是現在app項目是 app是一個應用,admin是一個應用,app吧為了接口性能吧異步任務丟給admin去執行,如果兩個應用的。就會出現部分使用

   Context::add('laravel_unique_job_key', 4444);Context::addHidden('eeee', 333333);$tokenInfo = new TokenInfo();Context::add('tokenInfo', $tokenInfo);

如果 增加的 儲存在上下文的value部分有對象的值的時候,比如 TokenInfo的在發送 dispatchJob($job);
就會吧 Context里面 datahidden部分會帶入 payload

{"displayName": "App\\Jobs\\Job","job": "Illuminate\\Queue\\CallQueuedHandler@call","maxTries": 3,"maxExceptions": null,"failOnTimeout": false,"backoff": null,"timeout": null,"retryUntil": null,"data": {"commandName": "App\\Jobs\\Job","command": "O:27:\"App\\Jobs\\Job\":1:{s:7:\"orderId\";i:221;}"},"illuminate:log:context": {"data": {"tokenInfo": "O:40:\"App\\Http\\TokenInfo\":2:{s:4:\"uuid\";s:0:\"\";s:2:\"id\";i:0;}","zx": "i:11111;"},"hidden": {"eeee": "i:333333;"}}
}

如果admin 沒有 TokenInfo的對象就會報錯,

RuntimeException: Value is incomplete class: {"__PHP_Incomplete_Class_Name":"App\\Http\\TokenInfo","uuid":"","id":0} 

解決方案:
1,在上游分發異步任務的時候,就不要有 Context 相關的使用 對象類型的數據
2,在下游執行任務的項目,吧存儲的對象也復制一份
3,自己封裝一個分發方法


if (!function_exists('dispatchJob')) {function dispatchJob(mixed $job){//需要排除的key,這些key可能會影響隊列的部分功能,需要先排除$excludeKey = ['laravel_unique_job_cache_store', 'laravel_unique_job_key'];$stay = $all = Context::all();$stayHidden = $allHidden = Context::allHidden();// 判斷是否有上下文,如果沒有直接 分發jobif (empty($all) && empty($allHidden)) {dispatch($job);} else {//先 forget 所有比不需要的key,dispatch 之后在還給 Context//需要刪除的 context key$filterKey = Arr::except($all, $excludeKey);$filterHiddenKey = Arr::except($allHidden, $excludeKey);$keys = array_keys($filterKey);$hiddenKeys = array_keys($filterHiddenKey);// 刪除不必要的keyif (!empty($keys)) {foreach ($keys as $key) {Context::forget($key);}}// 刪除不必要的隱藏keyif (!empty($hiddenKeys)) {foreach ($hiddenKeys as $hiddenKey) {Context::forgetHidden($hiddenKey);}}//分發任務dispatch($job);//歸還上下文if (!empty($keys)) {foreach ($keys as $key) {Context::add($key, $all[$key]);}}if (!empty($hiddenKeys)) {foreach ($hiddenKeys as $hiddenKey) {Context::addHidden($hiddenKey, $allHidden[$hiddenKey]);}}}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/80597.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/80597.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/80597.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入剖析 MyBatis 位運算查詢:從原理到最佳實踐

深入剖析 MyBatis 位運算查詢:從原理到最佳實踐 引言 在數據庫設計中,位運算是一種高效存儲和查詢多選字段的常用技術。然而,在實際開發中,特別是在使用 MyBatis 這樣的 ORM 框架時,位運算查詢往往會遇到一些意想不到…

01 | 大模型微調 | 從0學習到實戰微調 | AI發展與模型技術介紹

一、導讀 作為非AI專業技術開發者(我是小小爬蟲開發工程師😋) 本系列文章將圍繞《大模型微調》進行學習(也是我個人學習的筆記,所以會持續更新),最后以上手實操模型微調的目的。 (本文如若有…

代碼隨想錄算法訓練營第三十八天|動態規劃part6(完全背包2)

322. 零錢兌換 題目鏈接: 322. 零錢兌換 - 力扣(LeetCode) 文章講解: 代碼隨想錄 思路: 確定遞推公式: dp[j]min(dp[j],dp[j-coins[i]]1); 由于是完全背包 ,所以遍歷順序是正序 還存在另一…

使用 ECharts GL 實現交互式 3D 餅圖:技術解析與實踐

一、效果概覽 本文基于 Vue 3 和 ECharts GL,實現了一個具有以下特性的 3D 餅圖: 立體視覺效果:通過參數方程構建 3D 扇形與底座動態交互:支持點擊選中(位移效果)和懸停高亮(放大效果&#xff…

Transformer Decoder-Only 參數量計算

Transformer 的 Decoder-Only 架構(如 GPT 系列模型)是當前大語言模型的主流架構,其參數量主要由以下幾個部分組成: 嵌入層(Embedding Layer)自注意力層(Self-Attention Layers)前饋…

(自用)Java學習-5.8(總結,springboot)

一、MySQL 數據庫 表關系 一對一、一對多、多對多關系設計外鍵約束與級聯操作 DML 操作 INSERT INTO table VALUES(...) DELETE FROM table WHERE... UPDATE table SET colval WHERE...DQL 查詢 基礎查詢:SELECT * FROM table WHERE...聚合函數:COUNT()…

【日擼 Java 三百行】Day 11(順序表(一))

目錄 Day 11:順序表(一) 一、關于順序表 二、關于面向對象 三、代碼模塊分析 1. 順序表的屬性 2. 順序表的方法 四、代碼及測試 拓展: 小結 Day 11:順序表(一) Task: 在《數…

Spring Boot動態配置修改全攻略

精心整理了最新的面試資料和簡歷模板,有需要的可以自行獲取 點擊前往百度網盤獲取 點擊前往夸克網盤獲取 無需重啟應用,實時更新配置的終極指南 在微服務架構中,動態配置管理是提高系統靈活性的關鍵技術。本文將通過4種主流方案&#xff0c…

精益數據分析(55/126):雙邊市場模式的挑戰、策略與創業階段關聯

精益數據分析(55/126):雙邊市場模式的挑戰、策略與創業階段關聯 在創業和數據分析的學習旅程中,我們持續探索不同商業模式的奧秘。今天,依舊懷揣著與大家共同進步的想法,深入研讀《精益數據分析》&#xf…

linux內核pinctrl/gpio子系統驅動筆記

目錄 一、簡單介紹二、主要源碼文件和目錄gpio子系統pinctrl子系統兩個子系統之間的關系設備樹例子 三、主要的數據結構gpio子系統pinctrl子系統 四、驅動初始化流程五、難點說明 一、簡單介紹 GPIO子系統: Linux GPIO子系統是Linux內核中負責處理GPIO(通用輸入輸出…

Vue 2 項目中配置 Tailwind CSS、Font Awesome和daisyUI

Vue 2 項目中配置 Tailwind CSS 和 安裝 daisyUI 首先重點注意,Vue2中安裝Tailwind和daisyui一定要注意版本。 最佳版本 使用 Vue 2 TailwindCSS v2 DaisyUI v1 的兼容版本 "tailwindcss": "npm:tailwindcss/postcss7-compat^2.2.17", &q…

5.11 - 5.12 JDBC+Mybatis+StringBoot項目配置文件

JDBC: 預編譯SQL優點:安全,性能更高。 在cmd里面輸入java-jar就可以運行jar包。 Mybatis: 持久層框架。用于簡化JDBC的開發。 數據庫連接池里面放置的是一個一個Connection連接對象。(連接池中的連接可以復用&#…

探索科技的前沿動態:科技愛好者周刊

探索科技的前沿動態:科技愛好者周刊 在信息爆炸的時代,我們每時每刻都被新技術、新理念包圍。而如何在這紛繁復雜的信息中找到對自己有價值的內容,成了一大挑戰。今天,我們要介紹的是一個寶貴的資源——科技愛好者周刊,它致力于為科技愛好者提供優質的科技資訊,每周五發…

Vue3 官方宣布淘汰 Axios,擁抱Alova.js

過去十年,Axios 憑借其簡潔的API設計和瀏覽器/Node.js雙環境支持,成為前端開發者的首選請求庫。但隨著現代前端框架的演進和工程化需求的升級,Alova.js 以更輕量、更智能、更符合現代開發范式的姿態登場。 一、Axios的痛點 1,冗余的適配邏輯,比如Axios的通用配置(但實際…

Spring AI 與 Groq 的深度集成:解鎖高效 AI 推理新體驗

Spring AI 與 Groq 的深度集成:解鎖高效 AI 推理新體驗 前言 在人工智能飛速發展的當下,AI 推理的效率和性能成為開發者關注的焦點。Groq 作為一款基于 LPU? 的超快速 AI 推理引擎,憑借其強大的性能,能夠支持各類 AI 模型&…

風車OVF鏡像:解放AI開發限制的Ubuntu精簡系統

風車OVF鏡像:解放AI開發限制的Ubuntu精簡系統 AI白嫖續杯一站式-風車ovf AI白嫖續杯一站式解決-風車ovf 前言 作為一名AI開發者,我經常在Windows和Linux環境之間切換開發。然而,Windows平臺上的各種免費版限制逐漸成為我工作效率的瓶頸。在尋…

第十部分:文件與動靜態庫

目錄 1、文件系統 1.1、磁盤 1.2、文件系統 1.3、文件的增刪查改 2、軟硬鏈接 2.1、軟鏈接 2.2、硬鏈接 3、物理內存與文件 4、動靜態庫 4.1、靜態庫 4.1.1、靜態庫的制作 4.1.2、靜態庫的使用 4.2、動態庫 4.2.1、動態庫的制作 4.2.2、動態庫的使用 4.3、動靜…

android14優化ntp時間同步

簡介 網絡時間協議NTP(Network Time Protocol)是TCP/IP協議族里面的一個應用層協議,用來使客戶端和服務器之間進行時鐘同步,提供高精準度的時間校正。 當機器的ntp時間同步出現問題時,可以從ntp配置方面進行優化&…

ZYNQ筆記(二十):Clocking Wizard 動態配置

版本:Vivado2020.2(Vitis) 任務:ZYNQ PS端 通過 AXI4Lite 接口配置 Clocking Wizard IP核輸出時鐘頻率 目錄 一、介紹 二、寄存器定義 三、配置 四、PS端代碼 一、介紹 Xilinx 的 Clock Wizard IP核 用于在 FPGA 中生成和管理…

服務器帶寬基礎知識

服務器帶寬基礎知識詳解 一、帶寬的定義與基本概念 服務器帶寬(Bandwidth)是指服務器與互聯網之間在單位時間內傳輸數據的能力,通常以 Mbps(兆比特每秒) 或 Gbps(吉比特每秒) 為單位衡量。它決…