rpc_client

The RpcClient is the object responsible for implementing the client-side of remote procedure calls. The client, like the server, is implemented using plugin based approach. The RpcClient instance is available from micro.client and is configured by the ClientFeature. Inside of an RpcClient we find the following properties:

PropertyDescription

OutgoingRequestInterceptor

The request interceptor is responsible for transforming an RPC + request into the corresponding network calls

OutgoingCallFilter

The call filters act as middle-ware. The middle-ware can implement features such as: logging and service discovery

The RpcClient provides a simple API consisting of only a single function (ignoring the plugin API). This function is named call.

suspend fun <R : Any, S : Any, E : Any, Ctx : OutgoingCall, Companion : OutgoingCallCompanion<Ctx>> call(
    // example: Avatars.findAvatar
    callDescription: CallDescription<R, S, E>,

    // example: FindRequest(...)
    request: R, 

    // example: OutgoingHttpCall
    backend: Companion,

    // Per-call filters, primarily used for auth
    beforeFilters: (suspend (Ctx) -> Unit)? = null, 
    afterFilters: (suspend (Ctx) -> Unit)? = null
): IngoingCallResponse<S, E> 

Code: The function signature of RpcClient.call. We cover the extension functions, which provide a cleaner interface, later.

The RpcClient will forward to the OutgoingCallFilters and OutgoingRequestInterceptors when call is invoked.

Figure: Flow of call

Utilities

Several extension functions exist to make the use of RpcClient easier.

Extension functions

fun CallDescription<R, S, E>.call(request: R, client: ClientAndBackend)

Simplifies the interface by combining the RpcClient and OutgoingRequestInterceptor into a single object

fun CallDescription<R, S, E>.call(request: R, client: AuthenticatedClient)

Simplifies the interface by combining the ClientAndBackend with authentication code

Types

ClientAndBackend

FieldsDescription

client: RpcClient

Reference to the RpcClient

backend: OutgoingCallCompanion

Reference to the OutgoingRequestInterceptor

AuthenticatedClient

FieldsDescription

client: RpcClient

Reference to the RpcClient

backend: OutgoingCallCompanion

Reference to the OutgoingRequestInterceptor

afterFilters: (suspend (OutgoingCall) -> Unit)? = null

afterFilters to be passed to RpcClient.call

authenticator: suspend (OutgoingCall) -> Unit

beforeFilters to be passed to RpcClient.call

Last updated