atomic-queues 2.2.0 → 3.0.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.
- package/README.md +296 -417
- package/dist/cli/generators/classes.d.ts +1 -1
- package/dist/cli/generators/json-schema.d.ts +1 -1
- package/dist/cli/generators/typescript.d.ts +1 -1
- package/dist/cli/index.js +147 -5
- package/dist/cli/index.js.map +1 -1
- package/dist/cluster/cluster-discovery.service.d.ts +91 -0
- package/dist/cluster/cluster-discovery.service.d.ts.map +1 -0
- package/dist/cluster/cluster-discovery.service.js +423 -0
- package/dist/cluster/cluster-discovery.service.js.map +1 -0
- package/dist/cluster/grpc-peer-monitor.service.d.ts +31 -0
- package/dist/cluster/grpc-peer-monitor.service.d.ts.map +1 -0
- package/dist/cluster/grpc-peer-monitor.service.js +192 -0
- package/dist/cluster/grpc-peer-monitor.service.js.map +1 -0
- package/dist/cluster/index.d.ts +7 -0
- package/dist/cluster/index.d.ts.map +1 -0
- package/dist/cluster/index.js +23 -0
- package/dist/cluster/index.js.map +1 -0
- package/dist/cluster/leader-election.service.d.ts +38 -0
- package/dist/cluster/leader-election.service.d.ts.map +1 -0
- package/dist/cluster/leader-election.service.js +184 -0
- package/dist/cluster/leader-election.service.js.map +1 -0
- package/dist/cluster/master-coordinator.d.ts +50 -0
- package/dist/cluster/master-coordinator.d.ts.map +1 -0
- package/dist/cluster/master-coordinator.js +307 -0
- package/dist/cluster/master-coordinator.js.map +1 -0
- package/dist/cluster/redis-health-monitor.service.d.ts +23 -0
- package/dist/cluster/redis-health-monitor.service.d.ts.map +1 -0
- package/dist/cluster/redis-health-monitor.service.js +100 -0
- package/dist/cluster/redis-health-monitor.service.js.map +1 -0
- package/dist/cluster/server-ring.service.d.ts +48 -0
- package/dist/cluster/server-ring.service.d.ts.map +1 -0
- package/dist/cluster/server-ring.service.js +136 -0
- package/dist/cluster/server-ring.service.js.map +1 -0
- package/dist/decorators/constants.d.ts +0 -3
- package/dist/decorators/constants.d.ts.map +1 -1
- package/dist/decorators/constants.js +1 -5
- package/dist/decorators/constants.js.map +1 -1
- package/dist/decorators/entity.decorators.d.ts +16 -24
- package/dist/decorators/entity.decorators.d.ts.map +1 -1
- package/dist/decorators/entity.decorators.js +0 -39
- package/dist/decorators/entity.decorators.js.map +1 -1
- package/dist/decorators/index.d.ts +0 -1
- package/dist/decorators/index.d.ts.map +1 -1
- package/dist/decorators/index.js +0 -1
- package/dist/decorators/index.js.map +1 -1
- package/dist/decorators/interfaces.d.ts +10 -28
- package/dist/decorators/interfaces.d.ts.map +1 -1
- package/dist/decorators/job.decorators.d.ts +4 -52
- package/dist/decorators/job.decorators.d.ts.map +1 -1
- package/dist/decorators/job.decorators.js +6 -54
- package/dist/decorators/job.decorators.js.map +1 -1
- package/dist/decorators/metadata-readers.d.ts +5 -5
- package/dist/decorators/metadata-readers.d.ts.map +1 -1
- package/dist/decorators/metadata-readers.js +2 -8
- package/dist/decorators/metadata-readers.js.map +1 -1
- package/dist/decorators/schema.decorators.d.ts +1 -1
- package/dist/decorators/schema.decorators.d.ts.map +1 -1
- package/dist/decorators/schema.decorators.js.map +1 -1
- package/dist/decorators/utils.d.ts +1 -1
- package/dist/decorators/utils.d.ts.map +1 -1
- package/dist/decorators/utils.js +5 -1
- package/dist/decorators/utils.js.map +1 -1
- package/dist/domain/interfaces/config.interfaces.d.ts +92 -35
- package/dist/domain/interfaces/config.interfaces.d.ts.map +1 -1
- package/dist/domain/interfaces/index.d.ts +1 -0
- package/dist/domain/interfaces/index.d.ts.map +1 -1
- package/dist/domain/interfaces/index.js +1 -0
- package/dist/domain/interfaces/index.js.map +1 -1
- package/dist/{services/registry → domain/interfaces}/registry.types.d.ts.map +1 -1
- package/dist/domain/interfaces/registry.types.js.map +1 -0
- package/dist/grpc/grpc-client-pool.service.d.ts +71 -0
- package/dist/grpc/grpc-client-pool.service.d.ts.map +1 -0
- package/dist/grpc/grpc-client-pool.service.js +307 -0
- package/dist/grpc/grpc-client-pool.service.js.map +1 -0
- package/dist/grpc/grpc-server.service.d.ts +47 -0
- package/dist/grpc/grpc-server.service.d.ts.map +1 -0
- package/dist/grpc/grpc-server.service.js +494 -0
- package/dist/grpc/grpc-server.service.js.map +1 -0
- package/dist/grpc/index.d.ts +3 -0
- package/dist/grpc/index.d.ts.map +1 -0
- package/dist/{services/gate → grpc}/index.js +2 -1
- package/dist/grpc/index.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/module/atomic-queues.module.d.ts +1 -0
- package/dist/module/atomic-queues.module.d.ts.map +1 -1
- package/dist/module/atomic-queues.module.js +60 -11
- package/dist/module/atomic-queues.module.js.map +1 -1
- package/dist/services/command-discovery/command-discovery.service.js +2 -2
- package/dist/services/command-discovery/command-discovery.service.js.map +1 -1
- package/dist/services/entity-type-registry/entity-type-registry.service.d.ts +13 -0
- package/dist/services/entity-type-registry/entity-type-registry.service.d.ts.map +1 -0
- package/dist/services/entity-type-registry/entity-type-registry.service.js +75 -0
- package/dist/services/entity-type-registry/entity-type-registry.service.js.map +1 -0
- package/dist/services/entity-type-registry/index.d.ts +2 -0
- package/dist/services/entity-type-registry/index.d.ts.map +1 -0
- package/dist/services/{actor-system → entity-type-registry}/index.js +1 -1
- package/dist/services/entity-type-registry/index.js.map +1 -0
- package/dist/services/handler-executor/handler-executor.service.d.ts +0 -2
- package/dist/services/handler-executor/handler-executor.service.d.ts.map +1 -1
- package/dist/services/handler-executor/handler-executor.service.js +0 -19
- package/dist/services/handler-executor/handler-executor.service.js.map +1 -1
- package/dist/services/index.d.ts +3 -9
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +3 -9
- package/dist/services/index.js.map +1 -1
- package/dist/services/message-router/index.d.ts +2 -0
- package/dist/services/message-router/index.d.ts.map +1 -0
- package/dist/services/{actor-registry → message-router}/index.js +1 -1
- package/dist/services/message-router/index.js.map +1 -0
- package/dist/services/message-router/message-router.service.d.ts +53 -0
- package/dist/services/message-router/message-router.service.d.ts.map +1 -0
- package/dist/services/message-router/message-router.service.js +519 -0
- package/dist/services/message-router/message-router.service.js.map +1 -0
- package/dist/services/queue-bus/cluster-contracts.d.ts +1 -1
- package/dist/services/queue-bus/cluster-contracts.d.ts.map +1 -1
- package/dist/services/queue-bus/cluster-contracts.js.map +1 -1
- package/dist/services/queue-bus/queue-bus.service.d.ts +3 -21
- package/dist/services/queue-bus/queue-bus.service.d.ts.map +1 -1
- package/dist/services/queue-bus/queue-bus.service.js +15 -119
- package/dist/services/queue-bus/queue-bus.service.js.map +1 -1
- package/dist/utils/id.utils.d.ts +3 -0
- package/dist/utils/id.utils.d.ts.map +1 -0
- package/dist/utils/id.utils.js +14 -0
- package/dist/utils/id.utils.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/wal/index.d.ts +4 -0
- package/dist/wal/index.d.ts.map +1 -0
- package/dist/{services/executor-pool → wal}/index.js +3 -1
- package/dist/wal/index.js.map +1 -0
- package/dist/wal/wal.scripts.d.ts +51 -0
- package/dist/wal/wal.scripts.d.ts.map +1 -0
- package/dist/wal/wal.scripts.js +84 -0
- package/dist/wal/wal.scripts.js.map +1 -0
- package/dist/wal/wal.service.d.ts +46 -0
- package/dist/wal/wal.service.d.ts.map +1 -0
- package/dist/wal/wal.service.js +243 -0
- package/dist/wal/wal.service.js.map +1 -0
- package/dist/wal/wal.types.d.ts +23 -0
- package/dist/wal/wal.types.d.ts.map +1 -0
- package/dist/wal/wal.types.js +3 -0
- package/dist/wal/wal.types.js.map +1 -0
- package/dist/workers/consistent-hash.d.ts +97 -0
- package/dist/workers/consistent-hash.d.ts.map +1 -0
- package/dist/workers/consistent-hash.js +231 -0
- package/dist/workers/consistent-hash.js.map +1 -0
- package/dist/workers/entity-worker-manager.d.ts +35 -0
- package/dist/workers/entity-worker-manager.d.ts.map +1 -0
- package/dist/workers/entity-worker-manager.js +237 -0
- package/dist/workers/entity-worker-manager.js.map +1 -0
- package/dist/workers/entity-worker.d.ts +54 -0
- package/dist/workers/entity-worker.d.ts.map +1 -0
- package/dist/workers/entity-worker.js +142 -0
- package/dist/workers/entity-worker.js.map +1 -0
- package/dist/workers/index.d.ts +4 -0
- package/dist/workers/index.d.ts.map +1 -0
- package/dist/workers/index.js +20 -0
- package/dist/workers/index.js.map +1 -0
- package/package.json +17 -4
- package/dist/decorators/actor.decorators.d.ts +0 -4
- package/dist/decorators/actor.decorators.d.ts.map +0 -1
- package/dist/decorators/actor.decorators.js +0 -32
- package/dist/decorators/actor.decorators.js.map +0 -1
- package/dist/services/actor-registry/actor-registry.service.d.ts +0 -32
- package/dist/services/actor-registry/actor-registry.service.d.ts.map +0 -1
- package/dist/services/actor-registry/actor-registry.service.js +0 -220
- package/dist/services/actor-registry/actor-registry.service.js.map +0 -1
- package/dist/services/actor-registry/index.d.ts +0 -2
- package/dist/services/actor-registry/index.d.ts.map +0 -1
- package/dist/services/actor-registry/index.js.map +0 -1
- package/dist/services/actor-system/actor-system.service.d.ts +0 -19
- package/dist/services/actor-system/actor-system.service.d.ts.map +0 -1
- package/dist/services/actor-system/actor-system.service.js +0 -86
- package/dist/services/actor-system/actor-system.service.js.map +0 -1
- package/dist/services/actor-system/index.d.ts +0 -2
- package/dist/services/actor-system/index.d.ts.map +0 -1
- package/dist/services/actor-system/index.js.map +0 -1
- package/dist/services/executor-pool/executor-pool.service.d.ts +0 -38
- package/dist/services/executor-pool/executor-pool.service.d.ts.map +0 -1
- package/dist/services/executor-pool/executor-pool.service.js +0 -180
- package/dist/services/executor-pool/executor-pool.service.js.map +0 -1
- package/dist/services/executor-pool/index.d.ts +0 -2
- package/dist/services/executor-pool/index.d.ts.map +0 -1
- package/dist/services/executor-pool/index.js.map +0 -1
- package/dist/services/gate/gate.service.d.ts +0 -17
- package/dist/services/gate/gate.service.d.ts.map +0 -1
- package/dist/services/gate/gate.service.js +0 -81
- package/dist/services/gate/gate.service.js.map +0 -1
- package/dist/services/gate/index.d.ts +0 -2
- package/dist/services/gate/index.d.ts.map +0 -1
- package/dist/services/gate/index.js.map +0 -1
- package/dist/services/log/index.d.ts +0 -2
- package/dist/services/log/index.d.ts.map +0 -1
- package/dist/services/log/index.js +0 -18
- package/dist/services/log/index.js.map +0 -1
- package/dist/services/log/log.service.d.ts +0 -21
- package/dist/services/log/log.service.d.ts.map +0 -1
- package/dist/services/log/log.service.js +0 -92
- package/dist/services/log/log.service.js.map +0 -1
- package/dist/services/registry/index.d.ts +0 -4
- package/dist/services/registry/index.d.ts.map +0 -1
- package/dist/services/registry/index.js +0 -20
- package/dist/services/registry/index.js.map +0 -1
- package/dist/services/registry/registry.service.d.ts +0 -43
- package/dist/services/registry/registry.service.d.ts.map +0 -1
- package/dist/services/registry/registry.service.js +0 -402
- package/dist/services/registry/registry.service.js.map +0 -1
- package/dist/services/registry/registry.types.js.map +0 -1
- package/dist/services/registry/schema-converter.d.ts +0 -2
- package/dist/services/registry/schema-converter.d.ts.map +0 -1
- package/dist/services/registry/schema-converter.js +0 -27
- package/dist/services/registry/schema-converter.js.map +0 -1
- package/dist/services/result-collector/index.d.ts +0 -2
- package/dist/services/result-collector/index.d.ts.map +0 -1
- package/dist/services/result-collector/index.js +0 -18
- package/dist/services/result-collector/index.js.map +0 -1
- package/dist/services/result-collector/result-collector.service.d.ts +0 -17
- package/dist/services/result-collector/result-collector.service.d.ts.map +0 -1
- package/dist/services/result-collector/result-collector.service.js +0 -92
- package/dist/services/result-collector/result-collector.service.js.map +0 -1
- package/dist/services/scheduler/index.d.ts +0 -2
- package/dist/services/scheduler/index.d.ts.map +0 -1
- package/dist/services/scheduler/index.js +0 -18
- package/dist/services/scheduler/index.js.map +0 -1
- package/dist/services/scheduler/scheduler.service.d.ts +0 -17
- package/dist/services/scheduler/scheduler.service.d.ts.map +0 -1
- package/dist/services/scheduler/scheduler.service.js +0 -140
- package/dist/services/scheduler/scheduler.service.js.map +0 -1
- /package/dist/{services/registry → domain/interfaces}/registry.types.d.ts +0 -0
- /package/dist/{services/registry → domain/interfaces}/registry.types.js +0 -0
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
|
+
};
|
|
44
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
45
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
46
|
+
};
|
|
47
|
+
var GrpcClientPool_1;
|
|
48
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
49
|
+
exports.GrpcClientPool = void 0;
|
|
50
|
+
const common_1 = require("@nestjs/common");
|
|
51
|
+
const path = __importStar(require("path"));
|
|
52
|
+
const uuid_1 = require("uuid");
|
|
53
|
+
const constants_1 = require("../services/constants");
|
|
54
|
+
/**
|
|
55
|
+
* gRPC Client Pool — maintains connections to peer servers.
|
|
56
|
+
*
|
|
57
|
+
* Provides `forward()` and `forwardAndWait()` methods that the
|
|
58
|
+
* MessageRouter calls when an entity is owned by a remote server.
|
|
59
|
+
*/
|
|
60
|
+
let GrpcClientPool = GrpcClientPool_1 = class GrpcClientPool {
|
|
61
|
+
constructor(config) {
|
|
62
|
+
this.config = config;
|
|
63
|
+
this.logger = new common_1.Logger(GrpcClientPool_1.name);
|
|
64
|
+
this.clients = new Map();
|
|
65
|
+
this.circuitBreakers = new Map();
|
|
66
|
+
this.grpcModule = null;
|
|
67
|
+
this.protoDescriptor = null;
|
|
68
|
+
this.failureThreshold = config.grpc?.circuitBreakerFailureThreshold ?? 3;
|
|
69
|
+
this.cooldownMs = config.grpc?.circuitBreakerCooldownMs ?? 2000;
|
|
70
|
+
}
|
|
71
|
+
async onModuleInit() {
|
|
72
|
+
if (this.config.grpc?.enabled) {
|
|
73
|
+
await this.ensureLoaded();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
async onApplicationShutdown() {
|
|
77
|
+
for (const [, { client }] of this.clients) {
|
|
78
|
+
try {
|
|
79
|
+
client.close();
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
// ignore
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
this.clients.clear();
|
|
86
|
+
this.circuitBreakers.clear();
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Ensure the gRPC module is loaded (lazy, for optional dependency).
|
|
90
|
+
*/
|
|
91
|
+
async ensureLoaded() {
|
|
92
|
+
if (this.grpcModule)
|
|
93
|
+
return;
|
|
94
|
+
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
95
|
+
const grpc = require('@grpc/grpc-js');
|
|
96
|
+
const protoLoader = require('@grpc/proto-loader');
|
|
97
|
+
/* eslint-enable @typescript-eslint/no-var-requires */
|
|
98
|
+
const protoPath = path.join(__dirname, 'atomicqueues.proto');
|
|
99
|
+
const packageDef = protoLoader.loadSync(protoPath, {
|
|
100
|
+
keepCase: false,
|
|
101
|
+
longs: String,
|
|
102
|
+
enums: String,
|
|
103
|
+
defaults: true,
|
|
104
|
+
oneofs: true,
|
|
105
|
+
});
|
|
106
|
+
this.grpcModule = grpc;
|
|
107
|
+
this.protoDescriptor = grpc.loadPackageDefinition(packageDef);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Get or create a client connection to a peer server.
|
|
111
|
+
*/
|
|
112
|
+
checkCircuit(serverId) {
|
|
113
|
+
const cb = this.circuitBreakers.get(serverId);
|
|
114
|
+
if (!cb || cb.state === 'closed')
|
|
115
|
+
return;
|
|
116
|
+
if (cb.state === 'open') {
|
|
117
|
+
if (Date.now() - cb.openedAt >= this.cooldownMs) {
|
|
118
|
+
cb.state = 'half-open';
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
throw new Error('PEER_CIRCUIT_OPEN');
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
recordSuccess(serverId) {
|
|
125
|
+
const cb = this.circuitBreakers.get(serverId);
|
|
126
|
+
if (cb) {
|
|
127
|
+
cb.state = 'closed';
|
|
128
|
+
cb.consecutiveFailures = 0;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
recordFailure(serverId) {
|
|
132
|
+
let cb = this.circuitBreakers.get(serverId);
|
|
133
|
+
if (!cb) {
|
|
134
|
+
cb = { state: 'closed', consecutiveFailures: 0, lastFailureAt: 0, openedAt: 0 };
|
|
135
|
+
this.circuitBreakers.set(serverId, cb);
|
|
136
|
+
}
|
|
137
|
+
cb.consecutiveFailures++;
|
|
138
|
+
cb.lastFailureAt = Date.now();
|
|
139
|
+
if (cb.consecutiveFailures >= this.failureThreshold) {
|
|
140
|
+
cb.state = 'open';
|
|
141
|
+
cb.openedAt = Date.now();
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
openCircuit(serverId) {
|
|
145
|
+
let cb = this.circuitBreakers.get(serverId);
|
|
146
|
+
if (!cb) {
|
|
147
|
+
cb = { state: 'closed', consecutiveFailures: 0, lastFailureAt: 0, openedAt: 0 };
|
|
148
|
+
this.circuitBreakers.set(serverId, cb);
|
|
149
|
+
}
|
|
150
|
+
cb.state = 'open';
|
|
151
|
+
cb.openedAt = Date.now();
|
|
152
|
+
}
|
|
153
|
+
closeCircuit(serverId) {
|
|
154
|
+
const cb = this.circuitBreakers.get(serverId);
|
|
155
|
+
if (cb) {
|
|
156
|
+
cb.state = 'closed';
|
|
157
|
+
cb.consecutiveFailures = 0;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
async getClient(serverId, address) {
|
|
161
|
+
this.checkCircuit(serverId);
|
|
162
|
+
const existing = this.clients.get(serverId);
|
|
163
|
+
if (existing && existing.address === address) {
|
|
164
|
+
return existing.client;
|
|
165
|
+
}
|
|
166
|
+
await this.ensureLoaded();
|
|
167
|
+
const ServiceClass = this.protoDescriptor.atomicqueues.v1.AtomicQueuesNode;
|
|
168
|
+
const channelOptions = {
|
|
169
|
+
'grpc.keepalive_time_ms': this.config.grpc?.keepaliveTimeMs ?? 10000,
|
|
170
|
+
'grpc.keepalive_timeout_ms': this.config.grpc?.keepaliveTimeoutMs ?? 5000,
|
|
171
|
+
'grpc.keepalive_permit_without_calls': 1,
|
|
172
|
+
};
|
|
173
|
+
const client = new ServiceClass(address, this.grpcModule.credentials.createInsecure(), channelOptions);
|
|
174
|
+
this.clients.set(serverId, { address, client });
|
|
175
|
+
this.logger.log(`Connected to peer ${serverId} at ${address}`);
|
|
176
|
+
return client;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Forward a message to a remote server (fire-and-forget).
|
|
180
|
+
*/
|
|
181
|
+
async forward(serverId, address, message, originServerId, hops, senderEpoch = 0) {
|
|
182
|
+
const client = await this.getClient(serverId, address);
|
|
183
|
+
const envelope = {
|
|
184
|
+
id: message.id,
|
|
185
|
+
name: message.name,
|
|
186
|
+
payload: Buffer.from(JSON.stringify(message.data), 'utf-8'),
|
|
187
|
+
entityType: message.entityType,
|
|
188
|
+
entityId: message.entityId,
|
|
189
|
+
correlationId: message.correlationId ?? '',
|
|
190
|
+
isQuery: message.isQuery ?? false,
|
|
191
|
+
enqueuedAt: message.enqueuedAt,
|
|
192
|
+
attempts: message.attempts,
|
|
193
|
+
maxAttempts: message.maxAttempts,
|
|
194
|
+
originServer: originServerId,
|
|
195
|
+
hops: hops + 1,
|
|
196
|
+
senderEpoch,
|
|
197
|
+
};
|
|
198
|
+
const deadline = new Date(Date.now() + (this.config.grpc?.deadlines?.forwardMs ?? 1500));
|
|
199
|
+
return new Promise((resolve, reject) => {
|
|
200
|
+
client.forward(envelope, { deadline }, (err, response) => {
|
|
201
|
+
if (err) {
|
|
202
|
+
reject(new Error(`gRPC forward to ${serverId} failed: ${err.message}`));
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
if (!response.accepted) {
|
|
206
|
+
reject(new Error(`Forward rejected by ${serverId}: ${response.rejectReason}`));
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
resolve({
|
|
210
|
+
id: message.id,
|
|
211
|
+
entityKey: `${message.entityType}:${message.entityId}`,
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Forward a message to a remote server and wait for the result.
|
|
218
|
+
*/
|
|
219
|
+
async forwardAndWait(serverId, address, message, originServerId, hops, timeout, senderEpoch = 0) {
|
|
220
|
+
const client = await this.getClient(serverId, address);
|
|
221
|
+
const envelope = {
|
|
222
|
+
id: message.id,
|
|
223
|
+
name: message.name,
|
|
224
|
+
payload: Buffer.from(JSON.stringify(message.data), 'utf-8'),
|
|
225
|
+
entityType: message.entityType,
|
|
226
|
+
entityId: message.entityId,
|
|
227
|
+
correlationId: message.correlationId ?? (0, uuid_1.v4)(),
|
|
228
|
+
isQuery: true,
|
|
229
|
+
enqueuedAt: message.enqueuedAt,
|
|
230
|
+
attempts: message.attempts,
|
|
231
|
+
maxAttempts: message.maxAttempts,
|
|
232
|
+
originServer: originServerId,
|
|
233
|
+
hops: hops + 1,
|
|
234
|
+
senderEpoch,
|
|
235
|
+
};
|
|
236
|
+
return new Promise((resolve, reject) => {
|
|
237
|
+
const timer = setTimeout(() => {
|
|
238
|
+
reject(new Error(`gRPC forwardAndWait to ${serverId} timed out after ${timeout}ms`));
|
|
239
|
+
}, timeout);
|
|
240
|
+
const stream = client.forwardAndWait(envelope);
|
|
241
|
+
stream.on('data', (response) => {
|
|
242
|
+
clearTimeout(timer);
|
|
243
|
+
if (response.error) {
|
|
244
|
+
reject(new Error(response.error));
|
|
245
|
+
}
|
|
246
|
+
else if (response.result) {
|
|
247
|
+
const resultJson = Buffer.from(response.result).toString('utf-8');
|
|
248
|
+
resolve(JSON.parse(resultJson));
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
reject(new Error('Empty result from remote server'));
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
stream.on('error', (err) => {
|
|
255
|
+
clearTimeout(timer);
|
|
256
|
+
reject(new Error(`gRPC stream error from ${serverId}: ${err.message}`));
|
|
257
|
+
});
|
|
258
|
+
stream.on('end', () => {
|
|
259
|
+
clearTimeout(timer);
|
|
260
|
+
// If we haven't resolved yet, the stream ended without data
|
|
261
|
+
});
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Ping a peer server.
|
|
266
|
+
*/
|
|
267
|
+
async ping(serverId, address) {
|
|
268
|
+
const client = await this.getClient(serverId, address);
|
|
269
|
+
const myServerId = this.config.grpc?.serverId ?? 'unknown';
|
|
270
|
+
const deadline = new Date(Date.now() + (this.config.grpc?.deadlines?.pingMs ?? 1000));
|
|
271
|
+
return new Promise((resolve, _reject) => {
|
|
272
|
+
client.ping({ senderId: myServerId }, { deadline }, (err, response) => {
|
|
273
|
+
if (err) {
|
|
274
|
+
resolve({ healthy: false, queueDepth: 0 });
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
resolve({
|
|
278
|
+
healthy: true,
|
|
279
|
+
queueDepth: response.queueDepth ?? 0,
|
|
280
|
+
});
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Remove a client connection.
|
|
286
|
+
*/
|
|
287
|
+
removeClient(serverId) {
|
|
288
|
+
const existing = this.clients.get(serverId);
|
|
289
|
+
if (existing) {
|
|
290
|
+
try {
|
|
291
|
+
existing.client.close();
|
|
292
|
+
}
|
|
293
|
+
catch {
|
|
294
|
+
// ignore
|
|
295
|
+
}
|
|
296
|
+
this.clients.delete(serverId);
|
|
297
|
+
}
|
|
298
|
+
this.circuitBreakers.delete(serverId);
|
|
299
|
+
}
|
|
300
|
+
};
|
|
301
|
+
exports.GrpcClientPool = GrpcClientPool;
|
|
302
|
+
exports.GrpcClientPool = GrpcClientPool = GrpcClientPool_1 = __decorate([
|
|
303
|
+
(0, common_1.Injectable)(),
|
|
304
|
+
__param(0, (0, common_1.Inject)(constants_1.ATOMIC_QUEUES_CONFIG)),
|
|
305
|
+
__metadata("design:paramtypes", [Object])
|
|
306
|
+
], GrpcClientPool);
|
|
307
|
+
//# sourceMappingURL=grpc-client-pool.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grpc-client-pool.service.js","sourceRoot":"","sources":["../../src/grpc/grpc-client-pool.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { OnModuleInit, OnApplicationShutdown } from '@nestjs/common';
|
|
2
|
+
import { IAtomicQueuesModuleConfig } from '../domain';
|
|
3
|
+
import { MessageRouter } from '../services/message-router';
|
|
4
|
+
import { EntityWorkerManager } from '../workers';
|
|
5
|
+
import { MasterCoordinator, LeaderElectionService, ClusterDiscoveryService } from '../cluster';
|
|
6
|
+
/**
|
|
7
|
+
* gRPC Server — handles all cross-replica and cross-service communication.
|
|
8
|
+
*
|
|
9
|
+
* RPCs:
|
|
10
|
+
* - SpawnWorker / TeardownWorker / ListWorkers: Master → Replica
|
|
11
|
+
* - EnqueueToWorker / EnqueueToWorkerAndWait: Master → Replica (dispatch)
|
|
12
|
+
* - Petition / PetitionAndWait: Replica → Master (routing)
|
|
13
|
+
* - ReportIdle: Replica → Master (idle teardown)
|
|
14
|
+
* - Forward / ForwardAndWait: Master → Master (cross-service)
|
|
15
|
+
*/
|
|
16
|
+
export declare class GrpcServerService implements OnModuleInit, OnApplicationShutdown {
|
|
17
|
+
private readonly config;
|
|
18
|
+
private readonly router;
|
|
19
|
+
private readonly workerManager;
|
|
20
|
+
private readonly masterCoordinator;
|
|
21
|
+
private readonly leaderElection;
|
|
22
|
+
private readonly clusterDiscovery?;
|
|
23
|
+
private readonly logger;
|
|
24
|
+
private server;
|
|
25
|
+
private activePetitions;
|
|
26
|
+
private readonly maxConcurrentPetitions;
|
|
27
|
+
private nodeAddressCache;
|
|
28
|
+
constructor(config: IAtomicQueuesModuleConfig, router: MessageRouter, workerManager: EntityWorkerManager, masterCoordinator: MasterCoordinator, leaderElection: LeaderElectionService, clusterDiscovery?: ClusterDiscoveryService | undefined);
|
|
29
|
+
onModuleInit(): Promise<void>;
|
|
30
|
+
onApplicationShutdown(): Promise<void>;
|
|
31
|
+
private handleSpawnWorker;
|
|
32
|
+
private handleEnqueueToWorker;
|
|
33
|
+
private handleEnqueueToWorkerAndWait;
|
|
34
|
+
private handleTeardownWorker;
|
|
35
|
+
private handleListWorkers;
|
|
36
|
+
private handlePetition;
|
|
37
|
+
private handlePetitionAndWait;
|
|
38
|
+
private handleReportIdle;
|
|
39
|
+
private handleReportWorkers;
|
|
40
|
+
private handleForward;
|
|
41
|
+
private handleForwardAndWait;
|
|
42
|
+
private handlePing;
|
|
43
|
+
private resolveAndWaitTimeout;
|
|
44
|
+
private getReplicaAddress;
|
|
45
|
+
private deserializeEnvelope;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=grpc-server.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grpc-server.service.d.ts","sourceRoot":"","sources":["../../src/grpc/grpc-server.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,YAAY,EACZ,qBAAqB,EACtB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,yBAAyB,EAAsB,MAAM,WAAW,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAkC/F;;;;;;;;;GASG;AACH,qBACa,iBAAkB,YAAW,YAAY,EAAE,qBAAqB;IAQ3C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IAChE,OAAO,CAAC,QAAQ,CAAC,aAAa;IAE9B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc;IACnB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAbhD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsC;IAC7D,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAS;IAChD,OAAO,CAAC,gBAAgB,CAAgE;gBAGvC,MAAM,EAAE,yBAAyB,EACtB,MAAM,EAAE,aAAa,EAC9D,aAAa,EAAE,mBAAmB,EAElC,iBAAiB,EAAE,iBAAiB,EACpC,cAAc,EAAE,qBAAqB,EACzB,gBAAgB,CAAC,EAAE,uBAAuB,YAAA;IAKnE,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAyE7B,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAe5C,OAAO,CAAC,iBAAiB;YAUX,qBAAqB;YA+BrB,4BAA4B;YAiD5B,oBAAoB;IAUlC,OAAO,CAAC,iBAAiB;YAeX,cAAc;YA2Cd,qBAAqB;IAgEnC,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,mBAAmB;YAab,aAAa;YA2Bb,oBAAoB;IAqDlC,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,qBAAqB;YAQf,iBAAiB;IAkB/B,OAAO,CAAC,mBAAmB;CAkB5B"}
|