fix: Casa de Máquinas usa Registry global em vez de HTTP
O problema era que a Casa de Máquinas (porta 5000) não conseguia conectar ao Kernel (porta 5001) via HTTP dentro do mesmo container. Solução: - Exporta o ServiceRegistry globalmente no server/index.ts - Casa de Máquinas prioriza o Registry global (mesmo processo) - Fallback para HTTP apenas se Registry global não disponível Isso elimina a necessidade de loopback HTTP interno.
This commit is contained in:
parent
da371af0e0
commit
bb7cff6c80
|
|
@ -9,9 +9,23 @@ import type { Express, Request, Response } from "express";
|
|||
import http from "http";
|
||||
|
||||
// Consulta Registry do Kernel para serviços descobertos
|
||||
// Usa http.get em vez de fetch por causa de problemas com loopback no Node.js
|
||||
// Implementa retry com backoff para maior resiliência
|
||||
// PRIORIDADE 1: Usa Registry global se disponível (mesmo processo)
|
||||
// PRIORIDADE 2: Faz HTTP request para porta 5001 (fallback)
|
||||
async function fetchRegistryServicesWithRetry(maxRetries = 3, delay = 500): Promise<any[] | null> {
|
||||
// Tenta usar Registry global primeiro (mesmo processo Node.js)
|
||||
const globalRegistry = (global as any).arcadiaKernelRegistry;
|
||||
if (globalRegistry) {
|
||||
try {
|
||||
const services = globalRegistry.getServices();
|
||||
console.log(`[Engine Room] Usando Registry global: ${services.length} serviços`);
|
||||
return services;
|
||||
} catch (error) {
|
||||
console.error('[Engine Room] Erro ao acessar Registry global:', error);
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback: HTTP request para porta 5001
|
||||
console.log('[Engine Room] Registry global não disponível, tentando HTTP...');
|
||||
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
||||
const result = await fetchRegistryServicesOnce();
|
||||
if (result !== null) {
|
||||
|
|
|
|||
|
|
@ -397,14 +397,21 @@ export function log(message: string, source = "express") {
|
|||
|
||||
// Inicia Arcadia Kernel (Dashboard porta 5001) - Semana 3
|
||||
// Inicia ANTES do servidor HTTP para garantir que o Registry esteja pronto
|
||||
let kernel: ArcadiaKernel | undefined;
|
||||
if (process.env.KERNEL_ENABLED === 'true') {
|
||||
try {
|
||||
const kernel = new ArcadiaKernel({
|
||||
kernel = new ArcadiaKernel({
|
||||
dashboard: { enabled: true, port: 5001, host: '0.0.0.0' },
|
||||
autoStart: process.env.KERNEL_AUTOSTART === 'true',
|
||||
});
|
||||
await kernel.start();
|
||||
log('Arcadia Kernel iniciado em http://0.0.0.0:5001');
|
||||
|
||||
// Exporta o Registry globalmente para a Casa de Máquinas usar diretamente
|
||||
if (kernel.serviceRegistry) {
|
||||
(global as any).arcadiaKernelRegistry = kernel.serviceRegistry;
|
||||
log('[Kernel] Registry exportado globalmente');
|
||||
}
|
||||
} catch (error) {
|
||||
log(`Erro ao iniciar Kernel: ${error instanceof Error ? error.message : String(error)}`);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue