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.