[][src]Struct rdkafka::producer::future_producer::FutureProducer

#[must_use = "Producer polling thread will stop immediately if unused"]pub struct FutureProducer<C: ClientContext + 'static = DefaultClientContext> { /* fields omitted */ }

A producer that returns a Future for every message being produced.

Since message production in rdkafka is asynchronous, the caller cannot immediately know if the delivery of the message was successful or not. The FutureProducer provides this information in a Future, which will be completed once the information becomes available.

This producer has an internal polling thread and as such it doesn't need to be polled. It can be cheaply cloned to get a reference to the same underlying producer. The internal polling thread will be terminated when the FutureProducer goes out of scope.

Implementations

impl<C: ClientContext + 'static> FutureProducer<C>[src]

pub async fn send<'_, '_, K: ?Sized, P: ?Sized, T>(
    &'_ self,
    record: FutureRecord<'_, K, P>,
    queue_timeout: T
) -> Result<(i32, i64), (KafkaError, OwnedMessage)> where
    K: ToBytes,
    P: ToBytes,
    T: Into<Timeout>, 
[src]

This is supported on feature="tokio" only.

Sends a message to Kafka, returning the result of the send.

The queue_timeout parameter controls how long to retry for if the librdkafka producer queue is full. Set it to Timeout::Never to retry forever or Timeout::After(0) to never block. If the timeout is reached and the queue is still full, an RDKafkaError::QueueFull error will be reported in the [OwnedDeliveryResult].

Keep in mind that queue_timeout only applies to the first phase of the send operation. Once the message is queued, the underlying librdkafka client has separate timeout parameters that apply, like delivery.timeout.ms.

See also the FutureProducer::send_result method, which will not retry the queue operation if the queue is full.

Note: this method must be called from within the context of a Tokio runtime.

pub async fn send_with_runtime<'_, '_, R, K: ?Sized, P: ?Sized, T>(
    &'_ self,
    record: FutureRecord<'_, K, P>,
    queue_timeout: T
) -> Result<(i32, i64), (KafkaError, OwnedMessage)> where
    R: AsyncRuntime,
    K: ToBytes,
    P: ToBytes,
    T: Into<Timeout>, 
[src]

Like FutureProducer::send, but with a customizable asynchronous runtime.

See the AsyncRuntime trait for the details on the interface the runtime must satisfy.

pub fn send_result<'a, K: ?Sized, P: ?Sized>(
    &self,
    record: FutureRecord<'a, K, P>
) -> Result<DeliveryFuture, (KafkaError, FutureRecord<'a, K, P>)> where
    K: ToBytes,
    P: ToBytes
[src]

Like FutureProducer::send, but if enqueuing fails, an error will be returned immediately, alongside the FutureRecord provided.

pub fn poll<T: Into<Timeout>>(&self, timeout: T)[src]

Polls the internal producer.

This is not normally required since the FutureProducer had a thread dedicated to calling poll regularly.

pub fn flush<T: Into<Timeout>>(&self, timeout: T)[src]

Flushes any pending messages.

This method should be called before termination to ensure delivery of all enqueued messages.

pub fn in_flight_count(&self) -> i32[src]

Returns the number of messages that are either waiting to be sent or are sent but are waiting to be acknowledged.

pub fn client(&self) -> &Client<FutureProducerContext<C>>[src]

Returns the Client underlying this producer.

Trait Implementations

impl<C: ClientContext + 'static> Clone for FutureProducer<C>[src]

impl FromClientConfig for FutureProducer[src]

impl<C: ClientContext + 'static> FromClientConfigAndContext<C> for FutureProducer<C>[src]

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.