Skip to content
GuidesDocs 1.3.x

Service Communication

Start from the interaction contract, not the transport library. A caller that needs an immediate answer has different failure and coupling requirements from a consumer reacting asynchronously to an event.

Choose the mechanism

NeedCanonical route
Decide between request/response, streaming, and eventsChoosing a mechanism
Call generated internal services through ctx.call / ctx.streamService catalog
Select and compose endpoint resolutionResolvers
Add client tracing, deadlines, retry, or credentialsClient interceptors
Model fan-out, partial failure, or server streamingCommunication patterns
Keep calls in the same process with transport parityIn-process transport
React asynchronously through a brokerEvents

Synchronous baseline

Use the generated service catalog when services are part of the Connectum contract. It keeps target resolution, propagated request context, deadlines, and typed call names in one boundary. Use a direct ConnectRPC createClient() only for an external or deliberately uncatalogued API.

For direct gRPC calls, the transport must support HTTP/2. Client-side resilience belongs around the outgoing transport, and only client-safe interceptors should be composed there. The exact supported set and ordering are owned by Client interceptors, not repeated on every communication page.

Operational rule

Synchronous calls couple caller availability and latency to the downstream service. Events decouple time but add delivery, idempotency, ordering, and broker operations. The mechanism decision guide owns that trade-off; the focused pages own implementation details.