Skip to main content

RouteBuilder

Struct RouteBuilder 

Source
pub struct RouteBuilder { /* private fields */ }
Expand description

A fluent builder for constructing routes.

§Example

let definition = RouteBuilder::from("timer:tick?period=1000")
    .set_header("source", Value::String("timer".into()))
    .filter(|ex| ex.input.body.as_text().is_some())
    .to("log:info?showHeaders=true")
    .build()?;

Implementations§

Source§

impl RouteBuilder

Source

pub fn from(endpoint: &str) -> Self

Start building a route from the given source endpoint URI.

Source

pub fn filter<F>(self, predicate: F) -> FilterBuilder
where F: Fn(&Exchange) -> bool + Send + Sync + 'static,

Open a filter scope. Only exchanges matching predicate will be processed by the steps inside the scope. Non-matching exchanges skip the scope entirely and continue to steps after .end_filter().

Source

pub fn choice(self) -> ChoiceBuilder

Open a choice scope for content-based routing.

Within the choice, you can define multiple .when() clauses and an optional .otherwise() clause. The first matching when predicate determines which sub-pipeline executes.

Source

pub fn wire_tap(self, endpoint: &str) -> Self

Add a WireTap step that sends a clone of the exchange to the given endpoint URI (fire-and-forget). The original exchange continues downstream unchanged.

Source

pub fn error_handler(self, config: ErrorHandlerConfig) -> Self

Set a per-route error handler. Overrides the global error handler on CamelContext.

Source

pub fn circuit_breaker(self, config: CircuitBreakerConfig) -> Self

Set a circuit breaker for this route.

Source

pub fn concurrent(self, max: usize) -> Self

Override the consumer’s default concurrency model.

When set, the pipeline spawns a task per exchange, processing them concurrently. max limits the number of simultaneously active pipeline executions (0 = unbounded, channel buffer is backpressure).

§Example
RouteBuilder::from("http://0.0.0.0:8080/api")
    .concurrent(16)  // max 16 in-flight pipeline executions
    .process(handle_request)
    .build()
Source

pub fn sequential(self) -> Self

Force sequential processing, overriding a concurrent-capable consumer.

Useful for HTTP routes that mutate shared state and need ordering guarantees.

Source

pub fn route_id(self, id: impl Into<String>) -> Self

Set the route ID for this route.

If not set, the route will be assigned an auto-generated ID.

Source

pub fn auto_startup(self, auto: bool) -> Self

Set whether this route should automatically start when the context starts.

Default is true.

Source

pub fn startup_order(self, order: i32) -> Self

Set the startup order for this route.

Routes with lower values start first. Default is 1000.

Source

pub fn split(self, config: SplitterConfig) -> SplitBuilder

Begin a Splitter sub-pipeline. Steps added after this call (until .end_split()) will be executed per-fragment.

Returns a SplitBuilder — you cannot call .build() until .end_split() closes the split scope (enforced by the type system).

Source

pub fn multicast(self) -> MulticastBuilder

Begin a Multicast sub-pipeline. Steps added after this call (until .end_multicast()) will each receive a copy of the exchange.

Returns a MulticastBuilder — you cannot call .build() until .end_multicast() closes the multicast scope (enforced by the type system).

Source

pub fn throttle(self, max_requests: usize, period: Duration) -> ThrottleBuilder

Begin a Throttle sub-pipeline. Rate limits message processing to at most max_requests per period. Steps inside the throttle scope are only executed when the rate limit allows.

Returns a ThrottleBuilder — you cannot call .build() until .end_throttle() closes the throttle scope (enforced by the type system).

Source

pub fn load_balance(self) -> LoadBalancerBuilder

Begin a LoadBalance sub-pipeline. Distributes exchanges across multiple endpoints using a configurable strategy (round-robin, random, weighted, failover).

Returns a LoadBalancerBuilder — you cannot call .build() until .end_load_balance() closes the load balance scope (enforced by the type system).

Source

pub fn dynamic_router(self, expression: RouterExpression) -> Self

Add a dynamic router step that routes exchanges dynamically based on expression evaluation at runtime.

The expression receives the exchange and returns Some(uri) to route to the next endpoint, or None to stop routing.

§Example
RouteBuilder::from("timer:tick")
    .route_id("test-route")
    .dynamic_router(|ex| {
        ex.input.header("dest").and_then(|v| v.as_str().map(|s| s.to_string()))
    })
    .build()
Source

pub fn dynamic_router_with_config(self, config: DynamicRouterConfig) -> Self

Add a dynamic router step with full configuration.

Allows customization of URI delimiter, cache size, timeout, and other options.

Source

pub fn build(self) -> Result<RouteDefinition, CamelError>

Consume the builder and produce a RouteDefinition.

Source

pub fn build_canonical(self) -> Result<CanonicalRouteSpec, CamelError>

Compile this builder route into canonical v1 spec.

Trait Implementations§

Source§

impl StepAccumulator for RouteBuilder

Source§

fn steps_mut(&mut self) -> &mut Vec<BuilderStep>

Source§

fn to(self, endpoint: impl Into<String>) -> Self

Source§

fn process<F, Fut>(self, f: F) -> Self
where F: Fn(Exchange) -> Fut + Send + Sync + 'static, Fut: Future<Output = Result<Exchange, CamelError>> + Send + 'static,

Source§

fn process_fn(self, processor: BoxProcessor) -> Self

Source§

fn set_header(self, key: impl Into<String>, value: impl Into<Value>) -> Self

Source§

fn map_body<F>(self, mapper: F) -> Self
where F: Fn(Body) -> Body + Clone + Send + Sync + 'static,

Source§

fn set_body<B>(self, body: B) -> Self
where B: Into<Body> + Clone + Send + Sync + 'static,

Source§

fn set_body_fn<F>(self, expr: F) -> Self
where F: Fn(&Exchange) -> Body + Clone + Send + Sync + 'static,

Source§

fn set_header_fn<F>(self, key: impl Into<String>, expr: F) -> Self
where F: Fn(&Exchange) -> Value + Clone + Send + Sync + 'static,

Source§

fn aggregate(self, config: AggregatorConfig) -> Self

Source§

fn stop(self) -> Self

Stop processing this exchange immediately. No further steps in the current pipeline will run. Read more
Source§

fn log(self, message: impl Into<String>, level: LogLevel) -> Self

Log a message at the specified level. Read more
Source§

fn convert_body_to(self, target: BodyType) -> Self

Convert the message body to the target type. Read more
Source§

fn script(self, language: impl Into<String>, script: impl Into<String>) -> Self

Execute a script that can modify the exchange (headers, properties, body). Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FutureExt for T

Source§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
Source§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more