event_queue_params

定位

event_queue_params 是 queue / event worker 的控制參數表。

它不是 queue 本體,也不是 log;用途是讓程式用 p_key 讀取目前應採用的 queue、task queue、mailer 或費用調整版本。

Table schema

CREATE TABLE `event_queue_params` (
  `id` int NOT NULL AUTO_INCREMENT,
  `p_key` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `p_value` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='event_queue 控制參數';

目前參數

idp_keyp_value說明
1run_version2event_queue worker / handler 的執行版本
2task_run_version2task_event_queue worker / handler 的執行版本
3mailer_version3mailer / notification 寄送流程版本
4quote_fee_adjust_alpha0.2quote fee 調整係數

p_valuevarchar(100),但版本值仍用數字字串保存,例如 23

run_version 更新規則

調整 event_queue 執行程式、handler dispatch、notification worker 行為,且程式會依版本切換邏輯時,要同步更新:

UPDATE event_queue_params
SET p_value = '<new_version>'
WHERE p_key = 'run_version'
LIMIT 1;

目前基準值:

idp_keyp_value
1run_version2

若 queue 程式調整後預期跑新版邏輯,要把 run_versionp_value 改成程式預期的新版本值。

常用 SQL

查目前控制參數

SELECT
  id,
  p_key,
  p_value
FROM event_queue_params
ORDER BY id;

查 event_queue 版本

SELECT
  id,
  p_key,
  p_value
FROM event_queue_params
WHERE p_key = 'run_version'
LIMIT 1;

更新 event_queue 版本

UPDATE event_queue_params
SET p_value = '<new_version>'
WHERE p_key = 'run_version'
LIMIT 1;

更新 task_event_queue 版本

UPDATE event_queue_params
SET p_value = '<new_version>'
WHERE p_key = 'task_run_version'
LIMIT 1;

排查重點

  • 不要用 id 判斷參數語意;程式與排查都應以 p_key 為準。
  • 更新版本時不要新增同名 p_key,避免 worker 讀到不預期的 row。
  • 只調整 event_queue 通知 worker 時,通常更新 run_version
  • 只調整 task_event_queue 內部任務 worker 時,通常更新 task_run_version
  • 若 notification 送出流程和 mailer 實作有版本切換,才檢查 mailer_version