Skip to content

MakeServiceBuilder

Service Builders

Generated builders register handlers and create bare routers:

rust
// Build bare routers (no ConnectLayer applied yet)
let hello_router = helloworldservice::HelloWorldServiceBuilder::new()
    .say_hello(say_hello)
    .say_hello_stream(say_hello_stream)
    .with_state(AppState::default())
    .build();  // Returns Router without ConnectLayer

let user_router = userservice::UserServiceBuilder::new()
    .get_user(get_user)
    .with_state(AppState::default())
    .build();

TIP

Use build() when combining multiple services or configuring options. Use build_connect() only for simple single-service setups.

MakeServiceBuilder

Combines routers and applies protocol configuration:

rust
use std::time::Duration;
use connectrpc_axum::{MakeServiceBuilder, MessageLimits};

let service = MakeServiceBuilder::new()
    // Add service routers
    .add_router(hello_router)
    .add_router(user_router)

    // Configure options
    .message_limits(MessageLimits::new().receive_max_bytes(16 * 1024 * 1024))  // 16MB max
    .timeout(Duration::from_secs(30))
    .require_protocol_header(true)

    // Build final service
    .build();

let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await?;
axum::serve(listener, tower::make::Shared::new(service)).await?;

Configuration Options

Configuration options apply to:

  • add_router() — Connect routers
  • add_axum_router() — Axum routers with shared config

Configuration options do not apply to:

  • add_axum_router_raw() — Axum routers without any layers
  • add_grpc_service() — gRPC services (configure compression via Tonic directly)

Message Limits

See Message Limits for configuring receive and send size limits.

Timeout

See Timeout for detailed timeout configuration.

Compression

See Compression for detailed compression configuration.

Protocol Header Validation

Require the Connect-Protocol-Version header for Connect protocol requests:

rust
MakeServiceBuilder::new()
    .add_router(router)
    .require_protocol_header(true)  // Reject requests without header
    .build()

Adding gRPC Support

See Tonic gRPC Integration for serving both Connect and gRPC on the same port.

Adding Axum Routers

See Axum Router Integration for combining plain HTTP routes with ConnectRPC services.

Released under the MIT License.