Entorno de ejecución del contrato NRPC
NRPC es la capa de llamadas remotas tipadas de Converged. Convierte un contrato de
servicio de TypeScript en clientes compatibles y metadatos del servicio, de modo que un
navegador, microservicio, flujo de trabajo o entorno de ejecución nativo pueda llamar a
la misma capacidad sin mantener definiciones de API independientes basadas en cadenas.
Por qué existe
La plataforma está compuesta por módulos desplegados de forma independiente. Llamar a un módulo
directamente mediante una dirección haría que sus clientes dependieran de dónde se ejecuta y
del transporte que utiliza. NRPC separa esas preocupaciones: un contrato nombra el
servicio y sus métodos, mientras que el entorno de ejecución entrega una llamada al proceso
que actualmente posee el destino solicitado.
Esto mantiene en un solo lugar el acuerdo entre los clientes y las implementaciones. Los
parámetros de un método, el tipo de retorno, el comportamiento de transmisión y el nivel de
acceso son conocidos por la generación de código y están disponibles para todos los clientes compatibles.
Del contrato a la llamada
Los contratos son interfaces de TypeScript ubicadas en . Ejecutarmodules/types/<domain> en bun run gen analiza esas interfaces y crea un paquetecore/tools/nrpc. El paquete contiene los metadatos del contrato,modules/generated/g-<service>
una interfaz de servidor y fábricas de clientes con seguridad de tipos para cada entorno de ejecución.
Interfaz de TypeScript
|
v
Generador NRPC -> paquete g-<service>
| |
| +-> cliente de navegador
| +-> cliente de clúster
| +-> cliente de RT de flujo de trabajo
v
implementación del servicio -> backend de mensajería
Un servicio registra su implementación con . NRPCcreateMessagingBackend
utiliza los metadatos generados para encontrar el método solicitado, valida la forma de la llamada
en el límite del cliente, restaura los valores tipados e invoca el método de implementación
correspondiente. Un método que devuelve se entrega como un flujo; los métodosAsyncIterable
ordinarios producen una única respuesta.
Rutas de entrega
NRPC conserva el mismo contrato en varios entornos de ejecución:
- Los clientes de navegador utilizan un canal WebSocket compartido para enviar solicitudes a Fujin.
- Los clientes de servicio y nativos utilizan el transporte del clúster a través de Fujin, direccionados
a un destino de proceso lógico en lugar de a una dirección de host. - Los clientes de flujos de trabajo utilizan el punto de entrada de RT, que realiza llamadas mediante el transporte
de host QuickJS/Zig y permanece síncrono para una única evaluación del flujo de trabajo.
Fujin enruta una solicitud a la conexión de destino. El proceso receptor elige
el servicio y el método NRPC a partir de los metadatos de la solicitud; Fujin no necesita
entender los servicios de dominio de la plataforma. está disponiblecreateHttpBackend
cuando se requiere un perímetro HTTP y puede registrar la misma implementación del servicio
en el entorno de ejecución de mensajería, manteniendo alineadas las llamadas HTTP e internas.
Contexto y acceso
Las llamadas transportan datos de correlación, plazos y un contexto de espacio de trabajo o ámbito
confiable en su envoltorio. El servicio receptor se ejecuta con ese contexto, lo que
permite que el código de almacenamiento y autorización utilice el mismo límite de inquilino que se
estableció en el perímetro. Los servicios no deben derivar la identidad del espacio de trabajo a partir de una
carga útil de negocio.
El decorador declara una clase o método como @Access, public ouser. NRPC resuelve el nivel declarado más específico y aplica las reglas de permisosinternal
configuradas antes de invocar la implementación. Esto convierte la política de acceso en
parte del límite del servicio, en lugar de dejarla como una convención incoherente del cliente.
Límite de responsabilidades
NRPC se encarga de los metadatos del contrato, los clientes tipados generados, la serialización
de valores, el despacho de llamadas y los adaptadores de transporte utilizados por esas llamadas. No se encarga de
las reglas de negocio, el descubrimiento de servicios, la ubicación de despliegues, la persistencia de dominio ni
el enrutamiento del bus de mensajes. Esas responsabilidades permanecen, respectivamente, en el servicio,
el plano de control de despliegue, la capa de almacenamiento y Fujin.