@yss123/cage-kernel 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/README.md +71 -9
  2. package/dist/authorization.d.ts +34 -0
  3. package/dist/authorization.js +89 -0
  4. package/dist/authorization.js.map +1 -0
  5. package/dist/brands.d.ts +10 -0
  6. package/dist/brands.js +11 -1
  7. package/dist/brands.js.map +1 -1
  8. package/dist/db/connect.d.ts +14 -0
  9. package/dist/db/connect.js +18 -2
  10. package/dist/db/connect.js.map +1 -1
  11. package/dist/db/ddl.d.ts +40 -1
  12. package/dist/db/ddl.js +111 -7
  13. package/dist/db/ddl.js.map +1 -1
  14. package/dist/db/event-version-schema.d.ts +9 -0
  15. package/dist/db/event-version-schema.js +10 -0
  16. package/dist/db/event-version-schema.js.map +1 -0
  17. package/dist/db/index.d.ts +4 -0
  18. package/dist/db/index.js +4 -0
  19. package/dist/db/index.js.map +1 -1
  20. package/dist/db/migrate.d.ts +10 -0
  21. package/dist/db/migrate.js +9 -1
  22. package/dist/db/migrate.js.map +1 -1
  23. package/dist/db/rows.d.ts +2 -0
  24. package/dist/db/rows.js +6 -0
  25. package/dist/db/rows.js.map +1 -1
  26. package/dist/db/runtime-schema.d.ts +9 -0
  27. package/dist/db/runtime-schema.js +41 -0
  28. package/dist/db/runtime-schema.js.map +1 -0
  29. package/dist/db/session.d.ts +6 -0
  30. package/dist/db/session.js +6 -0
  31. package/dist/db/session.js.map +1 -1
  32. package/dist/errors.d.ts +12 -0
  33. package/dist/errors.js +14 -0
  34. package/dist/errors.js.map +1 -1
  35. package/dist/files/links.d.ts +10 -0
  36. package/dist/files/links.js +50 -0
  37. package/dist/files/links.js.map +1 -0
  38. package/dist/files/schema.d.ts +9 -0
  39. package/dist/files/schema.js +51 -0
  40. package/dist/files/schema.js.map +1 -0
  41. package/dist/index.d.ts +12 -2
  42. package/dist/index.js +12 -2
  43. package/dist/index.js.map +1 -1
  44. package/dist/kernel.d.ts +88 -0
  45. package/dist/kernel.js +82 -41
  46. package/dist/kernel.js.map +1 -1
  47. package/dist/mask.d.ts +7 -1
  48. package/dist/mask.js +11 -0
  49. package/dist/mask.js.map +1 -1
  50. package/dist/org.d.ts +7 -0
  51. package/dist/org.js +5 -0
  52. package/dist/org.js.map +1 -1
  53. package/dist/pipeline/draft.d.ts +16 -0
  54. package/dist/pipeline/draft.js +39 -0
  55. package/dist/pipeline/draft.js.map +1 -0
  56. package/dist/pipeline/idempotency.d.ts +6 -0
  57. package/dist/pipeline/idempotency.js +6 -0
  58. package/dist/pipeline/idempotency.js.map +1 -1
  59. package/dist/pipeline/invoker.d.ts +9 -0
  60. package/dist/pipeline/invoker.js +22 -0
  61. package/dist/pipeline/invoker.js.map +1 -0
  62. package/dist/pipeline/load.d.ts +13 -0
  63. package/dist/pipeline/load.js +22 -6
  64. package/dist/pipeline/load.js.map +1 -1
  65. package/dist/primitives/aggregate.d.ts +95 -2
  66. package/dist/primitives/aggregate.js +15 -1
  67. package/dist/primitives/aggregate.js.map +1 -1
  68. package/dist/primitives/business-process.d.ts +128 -0
  69. package/dist/primitives/business-process.js +62 -0
  70. package/dist/primitives/business-process.js.map +1 -0
  71. package/dist/primitives/collection.d.ts +65 -0
  72. package/dist/primitives/collection.js +79 -0
  73. package/dist/primitives/collection.js.map +1 -0
  74. package/dist/primitives/command.d.ts +110 -11
  75. package/dist/primitives/command.js +16 -0
  76. package/dist/primitives/command.js.map +1 -1
  77. package/dist/primitives/constraints.d.ts +30 -1
  78. package/dist/primitives/constraints.js +14 -0
  79. package/dist/primitives/constraints.js.map +1 -1
  80. package/dist/primitives/event.d.ts +36 -0
  81. package/dist/primitives/event.js +12 -1
  82. package/dist/primitives/event.js.map +1 -1
  83. package/dist/primitives/fields.d.ts +176 -36
  84. package/dist/primitives/fields.js +134 -14
  85. package/dist/primitives/fields.js.map +1 -1
  86. package/dist/primitives/flow.d.ts +173 -8
  87. package/dist/primitives/flow.js +29 -2
  88. package/dist/primitives/flow.js.map +1 -1
  89. package/dist/primitives/states.d.ts +34 -2
  90. package/dist/primitives/states.js +15 -0
  91. package/dist/primitives/states.js.map +1 -1
  92. package/dist/read.d.ts +39 -3
  93. package/dist/read.js +193 -48
  94. package/dist/read.js.map +1 -1
  95. package/dist/registry.d.ts +51 -1
  96. package/dist/registry.js +105 -5
  97. package/dist/registry.js.map +1 -1
  98. package/dist/relations.d.ts +21 -0
  99. package/dist/relations.js +65 -0
  100. package/dist/relations.js.map +1 -0
  101. package/dist/runtime.d.ts +35 -0
  102. package/dist/runtime.js +9 -0
  103. package/dist/runtime.js.map +1 -0
  104. package/dist/scope/index.d.ts +5 -0
  105. package/dist/scope/index.js +5 -0
  106. package/dist/scope/index.js.map +1 -1
  107. package/dist/telemetry.d.ts +8 -0
  108. package/dist/telemetry.js +28 -3
  109. package/dist/telemetry.js.map +1 -1
  110. package/dist/transfer/csv.d.ts +19 -0
  111. package/dist/transfer/csv.js +125 -0
  112. package/dist/transfer/csv.js.map +1 -0
  113. package/dist/transfer/index.d.ts +67 -0
  114. package/dist/transfer/index.js +271 -0
  115. package/dist/transfer/index.js.map +1 -0
  116. package/dist/transfer/schema.d.ts +9 -0
  117. package/dist/transfer/schema.js +36 -0
  118. package/dist/transfer/schema.js.map +1 -0
  119. package/dist/types.d.ts +38 -2
  120. package/dist/types.js +8 -0
  121. package/dist/types.js.map +1 -1
  122. package/dist/util/names.d.ts +6 -0
  123. package/dist/util/names.js +6 -0
  124. package/dist/util/names.js.map +1 -1
  125. package/dist/worker/consumers.d.ts +7 -0
  126. package/dist/worker/consumers.js +21 -9
  127. package/dist/worker/consumers.js.map +1 -1
  128. package/dist/worker/health.d.ts +38 -0
  129. package/dist/worker/health.js +20 -0
  130. package/dist/worker/health.js.map +1 -0
  131. package/dist/worker/index.d.ts +34 -1
  132. package/dist/worker/index.js +176 -37
  133. package/dist/worker/index.js.map +1 -1
  134. package/dist/worker/outbox.d.ts +25 -2
  135. package/dist/worker/outbox.js +40 -2
  136. package/dist/worker/outbox.js.map +1 -1
  137. package/dist/worker/scheduler.d.ts +10 -1
  138. package/dist/worker/scheduler.js +34 -4
  139. package/dist/worker/scheduler.js.map +1 -1
  140. package/package.json +1 -1
@@ -1,30 +1,52 @@
1
1
  // worker 进程:投递 outbox、执行反应、启动审批、跑定时任务、调用第三方。与 api 同一份代码和镜像,只是启动命令不同。
2
2
  import { sql } from 'kysely';
3
+ import { randomUUID } from 'node:crypto';
4
+ import { runtimeServices } from '../runtime.js';
3
5
  import { dedicatedClient, urlsFromEnv } from '../db/connect.js';
4
6
  import { createKernel } from '../kernel.js';
5
7
  import { consoleLogger } from '../telemetry.js';
6
8
  import { approvalConsumers, extensionConsumers, reactionConsumers, routeEngines, } from './consumers.js';
7
- import { claimBatch, deliver, MAX_ATTEMPTS, sweepStale } from './outbox.js';
9
+ import { claimBatch, deliver, MAX_ATTEMPTS, registerConsumerManifest, sweepStale } from './outbox.js';
8
10
  import { nextRun, tick } from './scheduler.js';
11
+ import { expireTransfers, transferConsumer } from '../transfer/index.js';
12
+ import { describeConsumers, registerWorkerSnapshot } from './health.js';
9
13
  export * from './outbox.js';
10
14
  export * from './consumers.js';
11
15
  export * from './scheduler.js';
16
+ export * from './health.js';
17
+ /** 合并内置、扩展和额外消费者,显式审批引擎覆盖同名代码路由;缺失引擎或名称冲突在启动前失败。 */
12
18
  export function buildConsumers(k, opts = {}) {
13
19
  const engines = { ...routeEngines(k), ...(opts.approvalEngines ?? {}) };
14
- return [...reactionConsumers(k), ...approvalConsumers(k, engines), ...extensionConsumers(k), ...(opts.consumers ?? [])];
20
+ const consumers = [transferConsumer(k), ...reactionConsumers(k), ...approvalConsumers(k, engines), ...extensionConsumers(k), ...(opts.consumers ?? [])];
21
+ registerConsumerManifest(k, consumers);
22
+ return consumers;
23
+ }
24
+ /** 构建并验证消费者后描述装载清单;这不启动轮询、建立心跳或证明 worker 正在运行。 */
25
+ export function workerManifest(k, opts = {}) {
26
+ return describeConsumers(k, buildConsumers(k, opts));
15
27
  }
16
28
  /** 不启动循环,只创建可手动驱动的 worker(测试用) */
29
+ /**
30
+ * 手动驱动当前可领取任务,drain 默认最多 50 轮;无到期事件且扩展无进展即返回处理数量。
31
+ * 未来重试、死信及被前序阻塞的事件仍可能存在,因此 drain 返回并不证明完整业务链已经成功。
32
+ */
17
33
  export function createWorker(k, opts = {}) {
34
+ const services = runtimeServices(k);
18
35
  const consumers = buildConsumers(k, opts);
36
+ const manifest = describeConsumers(k, consumers);
19
37
  const max = opts.maxAttempts ?? MAX_ATTEMPTS;
20
38
  return {
21
39
  kernel: k,
22
40
  consumers,
41
+ manifest,
42
+ snapshot: () => ({ id: 'manual', pid: process.pid, status: 'stopped', listenerHealthy: false, schedulerHealthy: false, heartbeatAt: null, inFlight: [], lastError: null, manifest }),
23
43
  async drain(maxRounds = 50) {
24
44
  let n = 0;
25
45
  for (let i = 0; i < maxRounds; i++) {
26
46
  const rows = await claimBatch(k, opts.concurrency ?? 8);
27
- if (rows.length === 0)
47
+ const extra = (await Promise.all(services.map(service => service.tick()))).reduce((a, b) => a + b, 0);
48
+ n += extra;
49
+ if (rows.length === 0 && extra === 0)
28
50
  break;
29
51
  await Promise.all(rows.map((r) => deliver(k, r, consumers, max)));
30
52
  n += rows.length;
@@ -33,34 +55,116 @@ export function createWorker(k, opts = {}) {
33
55
  },
34
56
  };
35
57
  }
58
+ /**
59
+ * 装配服务和消费者后,建立独立 LISTEN/调度锁连接,写首个心跳,再启动投递、定时任务和维护循环。
60
+ * 所有后台 Promise 统一登记,停机先停止新工作、取消可取消 IO,再等待在途工作后释放连接与锁。
61
+ * 停机超时只向调用方报错,不提前关闭仍持有任务锁的连接;后台清理继续等待真实任务结束。
62
+ * LISTEN 失效可由轮询继续发现 outbox;调度连接异常会停止新调度,健康状态如实反映该区别。
63
+ */
36
64
  export async function startWorker(opts = {}) {
37
65
  const log = opts.logger ?? consoleLogger;
38
66
  const urls = opts.urls ?? (opts.kernel ? undefined : urlsFromEnv());
39
67
  const k = opts.kernel ?? createKernel({ domain: opts.domain ?? {}, urls, logger: log });
40
- const w = createWorker(k, opts);
68
+ let w;
69
+ try {
70
+ w = createWorker(k, opts);
71
+ }
72
+ catch (e) {
73
+ if (!opts.kernel)
74
+ await k.close();
75
+ throw e;
76
+ }
41
77
  const concurrency = opts.concurrency ?? 8;
42
78
  const poll = opts.pollIntervalMs ?? 500;
43
79
  let stopped = false;
44
80
  let wake = null;
45
81
  const timers = [];
46
- // LISTEN:有新事件时立刻醒来,不用等轮询
82
+ const controller = new AbortController();
83
+ const services = runtimeServices(k);
84
+ const active = new Map();
85
+ const deliveries = new Set();
86
+ const state = {
87
+ id: randomUUID(), pid: process.pid, status: 'starting', listenerHealthy: false, schedulerHealthy: opts.jobs !== false,
88
+ heartbeatAt: null, inFlight: [], lastError: null, manifest: w.manifest,
89
+ };
90
+ const snapshot = () => ({ ...state, inFlight: [...active.keys(), ...[...deliveries].map((id) => `outbox:${id}`)] });
91
+ registerWorkerSnapshot(k, snapshot);
92
+ const failed = (name, e) => {
93
+ state.lastError = `${name}: ${e?.message ?? String(e)}`;
94
+ log.error({ task: name, err: state.lastError }, 'worker 后台任务失败');
95
+ };
96
+ // 所有定时器回调都进入同一跟踪器,停机才能真正等待已启动的任务。
97
+ const launch = (name, run) => {
98
+ if (stopped)
99
+ return;
100
+ if (active.has(name)) {
101
+ log.info({ task: name, reason: 'already-running' }, '跳过重叠的后台任务周期');
102
+ return;
103
+ }
104
+ const task = Promise.resolve().then(run).then(() => { }, (e) => failed(name, e)).finally(() => active.delete(name));
105
+ active.set(name, task);
106
+ };
107
+ const heartbeat = async () => {
108
+ const now = new Date();
109
+ await k.app.insertInto('sys.worker_runtime').values({ id: state.id, pid: process.pid, registry_fingerprint: w.manifest.registryFingerprint,
110
+ manifest: JSON.stringify(w.manifest), status: state.status, details: JSON.stringify(snapshot()), heartbeat_at: now })
111
+ .onConflict((oc) => oc.column('id').doUpdateSet({ status: state.status, details: JSON.stringify(snapshot()), heartbeat_at: now })).execute();
112
+ state.heartbeatAt = now.toISOString();
113
+ };
47
114
  const appUrl = urls?.app ?? urlsFromEnv().app;
48
- const listener = await dedicatedClient(appUrl, 'cage-worker-listen');
49
- await listener.query('LISTEN cage_outbox');
115
+ let listener = null;
116
+ let lockConn = null;
117
+ try {
118
+ for (const service of services)
119
+ await service.ready();
120
+ listener = await dedicatedClient(appUrl, 'cage-worker-listen');
121
+ await listener.query('LISTEN cage_outbox');
122
+ state.listenerHealthy = true;
123
+ if (opts.jobs !== false && k.registry.jobs.length > 0) {
124
+ lockConn = await dedicatedClient(appUrl, 'cage-scheduler');
125
+ lockConn.on('error', (e) => { state.schedulerHealthy = false; failed('scheduler-connection', e); });
126
+ lockConn.on('end', () => { state.schedulerHealthy = false; });
127
+ }
128
+ state.status = 'running';
129
+ await heartbeat();
130
+ }
131
+ catch (e) {
132
+ state.status = 'error';
133
+ await Promise.allSettled(services.map(service => service.close()));
134
+ await listener?.end().catch(() => { });
135
+ await lockConn?.end().catch(() => { });
136
+ if (!opts.kernel)
137
+ await k.close();
138
+ throw e;
139
+ }
50
140
  listener.on('notification', () => wake?.());
51
- listener.on('error', (e) => log.error({ err: String(e) }, 'outbox 监听连接出错'));
141
+ listener.on('error', (e) => { state.listenerHealthy = false; failed('outbox-listener', e); });
142
+ listener.on('end', () => { state.listenerHealthy = false; });
52
143
  const loop = (async () => {
53
144
  while (!stopped) {
54
145
  try {
55
146
  const rows = await claimBatch(k, concurrency);
56
147
  if (rows.length > 0) {
57
- await Promise.all(rows.map((r) => deliver(k, r, w.consumers, opts.maxAttempts ?? MAX_ATTEMPTS)));
148
+ const results = await Promise.allSettled(rows.map(async (row) => {
149
+ deliveries.add(row.id);
150
+ try {
151
+ await deliver(k, row, w.consumers, opts.maxAttempts ?? MAX_ATTEMPTS, { signal: controller.signal });
152
+ }
153
+ finally {
154
+ deliveries.delete(row.id);
155
+ }
156
+ }));
157
+ for (const result of results)
158
+ if (result.status === 'rejected')
159
+ failed('outbox-delivery', result.reason);
58
160
  continue;
59
161
  }
60
162
  }
61
163
  catch (e) {
62
- log.error({ err: String(e) }, 'outbox 领取失败');
164
+ failed('outbox-claim', e);
63
165
  }
166
+ if (stopped)
167
+ break;
64
168
  await new Promise((resolve) => {
65
169
  const t = setTimeout(resolve, poll);
66
170
  wake = () => {
@@ -71,49 +175,84 @@ export async function startWorker(opts = {}) {
71
175
  wake = null;
72
176
  }
73
177
  })();
74
- // 清扫与日常维护
75
- timers.push(setInterval(() => void sweepStale(k).catch(() => { }), 60_000));
178
+ for (const [index, service] of services.entries()) {
179
+ const run = () => launch(`runtime:${index}`, () => service.tick(controller.signal));
180
+ run();
181
+ timers.push(setInterval(run, poll));
182
+ }
183
+ timers.push(setInterval(() => launch('sweep', () => sweepStale(k)), 60_000));
76
184
  const housekeeping = async () => {
77
- try {
78
- await sql `select sys.ensure_audit_partitions(3)`.execute(k.app);
79
- await k.app.deleteFrom('sys.idempotency').where('expires_at', '<', new Date()).execute();
80
- await k.app.deleteFrom('sys.session').where('expires_at', '<', new Date()).execute();
81
- }
82
- catch (e) {
83
- log.warn({ err: String(e) }, '日常维护失败');
84
- }
185
+ await sql `select sys.ensure_audit_partitions(3)`.execute(k.app);
186
+ await k.app.deleteFrom('sys.idempotency').where('expires_at', '<', new Date()).execute();
187
+ await k.app.deleteFrom('sys.session').where('expires_at', '<', new Date()).execute();
188
+ await expireTransfers(k);
85
189
  };
86
- void housekeeping();
87
- timers.push(setInterval(() => void housekeeping(), 3600_000));
88
- // 定时任务
89
- let lockConn = null;
90
- if (opts.jobs !== false && k.registry.jobs.length > 0) {
91
- lockConn = await dedicatedClient(appUrl, 'cage-scheduler');
190
+ launch('housekeeping', housekeeping);
191
+ timers.push(setInterval(() => launch('housekeeping', housekeeping), 3600_000));
192
+ timers.push(setInterval(() => launch('heartbeat', async () => {
193
+ // 活跃投递续期,清扫器只恢复真正失去执行者的消息。
194
+ if (deliveries.size)
195
+ await k.app.updateTable('sys.outbox').set({ locked_at: sql `now()` }).where('id', 'in', [...deliveries]).where('status', '=', 'processing').execute();
196
+ await heartbeat();
197
+ }), 15_000));
198
+ if (lockConn) {
92
199
  const due = new Map(k.registry.jobs.map((j) => [j.name, nextRun(j.cron, new Date())]));
93
200
  timers.push(setInterval(() => {
201
+ if (!state.schedulerHealthy || stopped)
202
+ return;
94
203
  const now = new Date();
95
204
  for (const j of k.registry.jobs) {
96
205
  const at = due.get(j.name);
97
206
  if (now < at)
98
207
  continue;
99
208
  due.set(j.name, nextRun(j.cron, now));
100
- void tick(k, j, lockConn, at).catch((e) => log.error({ job: j.name, err: String(e) }, '调度失败'));
209
+ launch(`job:${j.name}`, () => tick(k, j, lockConn, at));
101
210
  }
102
- }, 5_000));
211
+ }, opts.schedulerIntervalMs ?? 5_000));
103
212
  }
104
- log.info({ consumers: w.consumers.map((c) => c.name), jobs: k.registry.jobs.map((j) => j.name) }, 'worker 已启动');
213
+ log.info({ ...w.manifest, workerId: state.id }, 'worker 已启动');
214
+ let stopping = null;
105
215
  return {
106
216
  ...w,
107
- async stop() {
217
+ snapshot,
218
+ stop() {
219
+ if (state.status === 'stopped')
220
+ return Promise.resolve();
221
+ if (stopping)
222
+ return stopping;
108
223
  stopped = true;
224
+ state.status = 'stopping';
225
+ for (const timer of timers)
226
+ clearInterval(timer);
109
227
  wake?.();
110
- for (const t of timers)
111
- clearInterval(t);
112
- await loop;
113
- await listener.end().catch(() => { });
114
- await lockConn?.end().catch(() => { });
115
- if (!opts.kernel)
116
- await k.close();
228
+ controller.abort(new Error('worker 正在停止'));
229
+ const cleanup = (async () => {
230
+ await loop;
231
+ await Promise.allSettled([...active.values()]);
232
+ await Promise.all(services.map(service => service.close()));
233
+ // 仍在执行的 scheduler Promise 完成后才允许关闭 session,释放跨实例锁。
234
+ await listener.end();
235
+ await lockConn?.end();
236
+ state.status = 'stopped';
237
+ state.listenerHealthy = false;
238
+ state.schedulerHealthy = false;
239
+ try {
240
+ await heartbeat();
241
+ }
242
+ finally {
243
+ if (!opts.kernel)
244
+ await k.close();
245
+ }
246
+ })();
247
+ stopping = new Promise((resolve, reject) => {
248
+ const timeout = setTimeout(() => {
249
+ state.lastError = `[CAGE-WORKER-003] 停机等待超时,在途任务:${snapshot().inFlight.join(', ')}`;
250
+ log.error({ err: state.lastError }, 'worker 停机超时;任务结束前保留锁和连接');
251
+ reject(new Error(state.lastError));
252
+ }, opts.shutdownTimeoutMs ?? 30_000);
253
+ cleanup.then(resolve, reject).finally(() => clearTimeout(timeout)).catch(() => { });
254
+ });
255
+ return stopping;
117
256
  },
118
257
  };
119
258
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/worker/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/worker/index.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,13 @@
1
1
  import { type Transaction } from 'kysely';
2
2
  import type { Kernel } from '../kernel.js';
3
+ /** 持久事件的投递视图;attempts 是已失败次数,aggregate_version 对历史事件可缺省。 */
3
4
  export interface OutboxRow {
4
5
  id: number;
5
6
  tenant_id: string;
6
7
  event: string;
7
8
  aggregate: string;
8
9
  aggregate_id: string;
10
+ aggregate_version?: number | null;
9
11
  payload: Record<string, any>;
10
12
  actor: {
11
13
  kind?: string;
@@ -23,16 +25,37 @@ export interface EventConsumer {
23
25
  /** 唯一名,用于 (事件 id, 消费者) 去重 */
24
26
  name: string;
25
27
  event: string;
26
- handle(row: OutboxRow, tx: Transaction<any>, kernel: Kernel): Promise<void>;
28
+ /** 外部 IO 在没有数据库事务占用连接时执行;恢复凭证由实现持久化。 */
29
+ prepare?(row: OutboxRow, kernel: Kernel, options: {
30
+ signal?: AbortSignal;
31
+ }): Promise<unknown>;
32
+ handle(row: OutboxRow, tx: Transaction<any>, kernel: Kernel, prepared?: unknown): Promise<void>;
27
33
  }
34
+ /** 运行期清单是启动验证的结果;投递时不能因为调用方漏传了关键消费者而静默完成。 */
35
+ export declare function registerConsumerManifest(k: Kernel, consumers: EventConsumer[]): void;
28
36
  export declare const MAX_ATTEMPTS = 10;
29
37
  /** 指数退避:1 秒、2 秒、4 秒……最多 1 小时 */
30
38
  export declare function backoffMs(attempts: number): number;
39
+ /**
40
+ * 短事务领取到期事件并标 processing,SKIP LOCKED 使其他 worker 可继续领取不同对象。
41
+ * 同 aggregate_id 的较早非 done 事件会阻塞后续事件,死信也不会被跳过,保持业务先后关系。
42
+ * 返回时领取事务已提交;实际消费者在后续独立事务执行,崩溃任务由清扫器恢复。
43
+ */
31
44
  export declare function claimBatch(k: Kernel, limit: number): Promise<OutboxRow[]>;
32
- export declare function deliver(k: Kernel, row: OutboxRow, consumers: EventConsumer[], maxAttempts?: number): Promise<'done' | 'retry' | 'dead'>;
45
+ /**
46
+ * 先核对启动清单,再按消费者逐一恢复 trace、检查去重、prepare 外部 IO、事务内 handle 与去重登记。
47
+ * prepare 不持有消费事务连接,外部成功回执的持久化由消费者实现;本地去重不能代替远端幂等。
48
+ * 已成功消费者重投时跳过;剩余失败按永久错误/次数进入 dead 或指数退避,全部完成才标 done。
49
+ * 返回值是本次投递结论,retry 不代表后台已等待或重试完成。
50
+ */
51
+ export declare function deliver(k: Kernel, row: OutboxRow, consumers: EventConsumer[], maxAttempts?: number, options?: {
52
+ signal?: AbortSignal;
53
+ }): Promise<'done' | 'retry' | 'dead'>;
33
54
  /** 清扫:worker 崩溃后卡在「处理中」超过 5 分钟的事件重置为待投递 */
34
55
  export declare function sweepStale(k: Kernel, olderThanMs?: number): Promise<number>;
35
56
  /** 人工重放死信:仍然走内核流水线 */
57
+ /** 保留 processed_event 去重证据,仅重置投递状态;不会解除连接器 unknown 或撤销已成功的消费者。 */
36
58
  export declare function replayDeadLetter(k: Kernel, deadLetterId: number, handledBy: string): Promise<void>;
37
59
  /** 人工丢弃死信:标记完成,解除对同一聚合后续事件的阻塞 */
60
+ /** 这是运维作出的业务取舍,不会补做漏掉的副作用;上层必须先校验权限并记录操作审计。 */
38
61
  export declare function discardDeadLetter(k: Kernel, deadLetterId: number, handledBy: string): Promise<void>;
@@ -2,11 +2,29 @@
2
2
  import { sql } from 'kysely';
3
3
  import { isCageError } from '../errors.js';
4
4
  import { withCarrier } from '../telemetry.js';
5
+ const manifests = new WeakMap();
6
+ /** 运行期清单是启动验证的结果;投递时不能因为调用方漏传了关键消费者而静默完成。 */
7
+ export function registerConsumerManifest(k, consumers) {
8
+ const names = new Set();
9
+ const events = new Map(k.registry.events.map((e) => [e.name, []]));
10
+ for (const c of consumers) {
11
+ if (names.has(c.name))
12
+ throw new Error(`[CAGE-WORKER-002] 消费者名称重复:${c.name}`);
13
+ names.add(c.name);
14
+ events.set(c.event, [...(events.get(c.event) ?? []), c.name]);
15
+ }
16
+ manifests.set(k, events);
17
+ }
5
18
  export const MAX_ATTEMPTS = 10;
6
19
  /** 指数退避:1 秒、2 秒、4 秒……最多 1 小时 */
7
20
  export function backoffMs(attempts) {
8
21
  return Math.min(3600_000, 1000 * 2 ** Math.max(0, attempts - 1));
9
22
  }
23
+ /**
24
+ * 短事务领取到期事件并标 processing,SKIP LOCKED 使其他 worker 可继续领取不同对象。
25
+ * 同 aggregate_id 的较早非 done 事件会阻塞后续事件,死信也不会被跳过,保持业务先后关系。
26
+ * 返回时领取事务已提交;实际消费者在后续独立事务执行,崩溃任务由清扫器恢复。
27
+ */
10
28
  export async function claimBatch(k, limit) {
11
29
  return k.app.transaction().execute(async (tx) => {
12
30
  const { rows } = await sql `
@@ -42,11 +60,29 @@ function isPermanent(err) {
42
60
  // 带错误码的框架错误(声明不一致、载荷不符合声明等)重试也不会好
43
61
  return /\[CAGE-/.test(String(e?.message ?? ''));
44
62
  }
45
- export async function deliver(k, row, consumers, maxAttempts = MAX_ATTEMPTS) {
63
+ /**
64
+ * 先核对启动清单,再按消费者逐一恢复 trace、检查去重、prepare 外部 IO、事务内 handle 与去重登记。
65
+ * prepare 不持有消费事务连接,外部成功回执的持久化由消费者实现;本地去重不能代替远端幂等。
66
+ * 已成功消费者重投时跳过;剩余失败按永久错误/次数进入 dead 或指数退避,全部完成才标 done。
67
+ * 返回值是本次投递结论,retry 不代表后台已等待或重试完成。
68
+ */
69
+ export async function deliver(k, row, consumers, maxAttempts = MAX_ATTEMPTS, options = {}) {
46
70
  const mine = consumers.filter((c) => c.event === row.event);
47
71
  try {
72
+ const manifest = manifests.get(k);
73
+ const required = manifest?.get(row.event);
74
+ const missing = required?.filter((name) => !mine.some((c) => c.name === name)) ?? [];
75
+ if (missing.length || (mine.length === 0 && !(manifest?.has(row.event) ?? k.registry.events.some((e) => e.name === row.event)))) {
76
+ throw new Error(`[CAGE-WORKER-002] 事件 ${row.event} 缺少必要消费者或不属于当前注册版本:${missing.join(', ') || 'unknown-event'}`);
77
+ }
48
78
  await withCarrier(row.trace, async () => {
49
79
  for (const c of mine) {
80
+ options.signal?.throwIfAborted();
81
+ const already = await k.app.selectFrom('sys.processed_event').select('event_id').where('event_id', '=', row.id).where('consumer', '=', c.name).executeTakeFirst();
82
+ if (already)
83
+ continue;
84
+ // 出站执行不在下方事务内等待网络,也不会持有连接再向同一个池取第二条连接。
85
+ const prepared = c.prepare ? await c.prepare(row, k, options) : undefined;
50
86
  await k.app.transaction().execute(async (tx) => {
51
87
  const first = await tx
52
88
  .insertInto('sys.processed_event')
@@ -56,7 +92,7 @@ export async function deliver(k, row, consumers, maxAttempts = MAX_ATTEMPTS) {
56
92
  .executeTakeFirst();
57
93
  if (!first)
58
94
  return; // 处理过了:直接跳过,保证幂等
59
- await c.handle(row, tx, k);
95
+ await c.handle(row, tx, k, prepared);
60
96
  });
61
97
  }
62
98
  });
@@ -97,6 +133,7 @@ export async function sweepStale(k, olderThanMs = 5 * 60_000) {
97
133
  return Number(r.numUpdatedRows);
98
134
  }
99
135
  /** 人工重放死信:仍然走内核流水线 */
136
+ /** 保留 processed_event 去重证据,仅重置投递状态;不会解除连接器 unknown 或撤销已成功的消费者。 */
100
137
  export async function replayDeadLetter(k, deadLetterId, handledBy) {
101
138
  await k.app.transaction().execute(async (tx) => {
102
139
  const d = await tx.selectFrom('sys.dead_letter').selectAll().where('id', '=', deadLetterId).where('handled_at', 'is', null).forUpdate().executeTakeFirst();
@@ -108,6 +145,7 @@ export async function replayDeadLetter(k, deadLetterId, handledBy) {
108
145
  });
109
146
  }
110
147
  /** 人工丢弃死信:标记完成,解除对同一聚合后续事件的阻塞 */
148
+ /** 这是运维作出的业务取舍,不会补做漏掉的副作用;上层必须先校验权限并记录操作审计。 */
111
149
  export async function discardDeadLetter(k, deadLetterId, handledBy) {
112
150
  await k.app.transaction().execute(async (tx) => {
113
151
  const d = await tx.selectFrom('sys.dead_letter').selectAll().where('id', '=', deadLetterId).where('handled_at', 'is', null).forUpdate().executeTakeFirst();
@@ -1 +1 @@
1
- {"version":3,"file":"outbox.js","sourceRoot":"","sources":["../../src/worker/outbox.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"outbox.js","sourceRoot":"","sources":["../../src/worker/outbox.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,16 @@
1
1
  import type pg from 'pg';
2
2
  import type { Kernel } from '../kernel.js';
3
3
  import type { Job, JobApi } from '../primitives/flow.js';
4
+ /** 计算给定时间之后的下一周期,不枚举历史遗漏周期;无效 cron 由解析器抛错。 */
4
5
  export declare function nextRun(cron: string, after: Date): Date;
6
+ /**
7
+ * 为一次租户任务构造受限上下文;只能读 j.reads、调用 j.calls 中同一声明对象。
8
+ * 每次 call 独立经过内核事务,整个 job 不是一笔大事务;业务需自行设计多步重试与幂等。
9
+ */
5
10
  export declare function jobApi(k: Kernel, j: Job, tenantId: string, now: Date): JobApi;
6
- /** 执行一次任务(拿到锁才执行);返回是否执行了 */
11
+ /**
12
+ * 同步登记本实例运行标记,再取得专用连接的会话咨询锁;二者分别防同进程重入和跨实例重叠。
13
+ * force 可忽略停用/已跑周期,但仍不能绕过互斥。拿锁后逐租户执行并汇总最后错误。
14
+ * 只有任务 Promise 真正结束才释放锁;返回 true 表示本轮执行过,不表示每个租户业务均成功。
15
+ */
7
16
  export declare function tick(k: Kernel, j: Job, lockConn: pg.Client, scheduledAt: Date, force?: boolean): Promise<boolean>;
@@ -6,9 +6,14 @@ import { systemCtx } from '../org.js';
6
6
  import { scopedFind } from '../pipeline/load.js';
7
7
  import { rowToSnapshot } from '../db/rows.js';
8
8
  import { hash32 } from '../util/names.js';
9
+ /** 计算给定时间之后的下一周期,不枚举历史遗漏周期;无效 cron 由解析器抛错。 */
9
10
  export function nextRun(cron, after) {
10
11
  return CronExpressionParser.parse(cron, { currentDate: after }).next().toDate();
11
12
  }
13
+ /**
14
+ * 为一次租户任务构造受限上下文;只能读 j.reads、调用 j.calls 中同一声明对象。
15
+ * 每次 call 独立经过内核事务,整个 job 不是一笔大事务;业务需自行设计多步重试与幂等。
16
+ */
12
17
  export function jobApi(k, j, tenantId, now) {
13
18
  const caps = j.calls.map((c) => k.registry.capabilityOf(c));
14
19
  const ctx = systemCtx({ kind: 'job', name: j.name, tenantId, capabilities: caps });
@@ -40,12 +45,31 @@ export function jobApi(k, j, tenantId, now) {
40
45
  };
41
46
  }
42
47
  /** 执行一次任务(拿到锁才执行);返回是否执行了 */
48
+ const running = new WeakMap();
49
+ /**
50
+ * 同步登记本实例运行标记,再取得专用连接的会话咨询锁;二者分别防同进程重入和跨实例重叠。
51
+ * force 可忽略停用/已跑周期,但仍不能绕过互斥。拿锁后逐租户执行并汇总最后错误。
52
+ * 只有任务 Promise 真正结束才释放锁;返回 true 表示本轮执行过,不表示每个租户业务均成功。
53
+ */
43
54
  export async function tick(k, j, lockConn, scheduledAt, force = false) {
55
+ const active = running.get(k) ?? new Set();
56
+ running.set(k, active);
57
+ // 会话 advisory lock 对同一连接可重入,必须先同步登记本进程正在运行的任务。
58
+ // 错过周期默认跳过,不积累一个追赶队列。
59
+ if (active.has(j.name)) {
60
+ k.log.info({ job: j.name, scheduledAt: scheduledAt.toISOString(), reason: 'already-running' }, '跳过重叠的任务周期');
61
+ return false;
62
+ }
63
+ active.add(j.name);
44
64
  const lockId = hash32(`cage.job.${j.name}`);
45
- const r = await lockConn.query('select pg_try_advisory_lock($1) as ok', [lockId]);
46
- if (!r.rows[0].ok)
47
- return false; // 别的实例在跑:本实例跳过
65
+ let locked = false;
48
66
  try {
67
+ const r = await lockConn.query('select pg_try_advisory_lock($1) as ok', [lockId]);
68
+ locked = r.rows[0].ok;
69
+ if (!locked) {
70
+ k.log.info({ job: j.name, scheduledAt: scheduledAt.toISOString(), reason: 'other-worker' }, '跳过其他实例持有的任务周期');
71
+ return false;
72
+ }
49
73
  await k.app.insertInto('sys.job_state').values({ name: j.name }).onConflict((oc) => oc.column('name').doNothing()).execute();
50
74
  const st = await k.app.selectFrom('sys.job_state').selectAll().where('name', '=', j.name).executeTakeFirstOrThrow();
51
75
  if (!st.enabled && !force)
@@ -71,7 +95,13 @@ export async function tick(k, j, lockConn, scheduledAt, force = false) {
71
95
  return true;
72
96
  }
73
97
  finally {
74
- await lockConn.query('select pg_advisory_unlock($1)', [lockId]); // 加锁和解锁必须在同一个连接上
98
+ try {
99
+ if (locked)
100
+ await lockConn.query('select pg_advisory_unlock($1)', [lockId]); // 任务结束前不能释放跨实例锁
101
+ }
102
+ finally {
103
+ active.delete(j.name);
104
+ }
75
105
  }
76
106
  }
77
107
  //# sourceMappingURL=scheduler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/worker/scheduler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/worker/scheduler.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yss123/cage-kernel",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "笼子内核:声明原语、写入流水线、范围组合子、读侧、worker 运行时",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",