Struct rdkafka::producer::future_producer::FutureProducer

source ·
pub struct FutureProducer<C = DefaultClientContext, R = DefaultRuntime>
where C: ClientContext + 'static,
{ /* private fields */ }
Expand description

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§

source§

impl<C, R> FutureProducer<C, R>
where C: ClientContext + 'static, R: AsyncRuntime,

source

pub async fn send<K, P, T>( &self, record: FutureRecord<'_, K, P>, queue_timeout: T, ) -> OwnedDeliveryResult
where K: ToBytes + ?Sized, P: ToBytes + ?Sized, T: Into<Timeout>,

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 RDKafkaErrorCode::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.

source

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

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

source

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

Polls the internal producer.

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

Trait Implementations§

source§

impl<C, R> Clone for FutureProducer<C, R>
where C: ClientContext + 'static,

source§

fn clone(&self) -> FutureProducer<C, R>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<R> FromClientConfig for FutureProducer<DefaultClientContext, R>
where R: AsyncRuntime,

source§

fn from_config( config: &ClientConfig, ) -> KafkaResult<FutureProducer<DefaultClientContext, R>>

Creates a client from a client configuration. The default client context will be used.
source§

impl<C, R> FromClientConfigAndContext<C> for FutureProducer<C, R>
where C: ClientContext + 'static, R: AsyncRuntime,

source§

fn from_config_and_context( config: &ClientConfig, context: C, ) -> KafkaResult<FutureProducer<C, R>>

Creates a client from a client configuration and a client context.
source§

impl<C, R> Producer<FutureProducerContext<C>> for FutureProducer<C, R>
where C: ClientContext + 'static, R: AsyncRuntime,

source§

fn client(&self) -> &Client<FutureProducerContext<C>>

Returns the Client underlying this producer.
source§

fn flush<T: Into<Timeout>>(&self, timeout: T) -> KafkaResult<()>

Flushes any pending messages. Read more
source§

fn in_flight_count(&self) -> i32

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

fn init_transactions<T: Into<Timeout>>(&self, timeout: T) -> KafkaResult<()>

Enable sending transactions with this producer. Read more
source§

fn begin_transaction(&self) -> KafkaResult<()>

Begins a new transaction. Read more
source§

fn send_offsets_to_transaction<T: Into<Timeout>>( &self, offsets: &TopicPartitionList, cgm: &ConsumerGroupMetadata, timeout: T, ) -> KafkaResult<()>

Associates an offset commit operation with this transaction. Read more
source§

fn commit_transaction<T: Into<Timeout>>(&self, timeout: T) -> KafkaResult<()>

Commits the current transaction. Read more
source§

fn abort_transaction<T: Into<Timeout>>(&self, timeout: T) -> KafkaResult<()>

Aborts the current transaction. Read more
source§

fn context(&self) -> &Arc<C>

Returns a reference to the ProducerContext used to create this producer.

Auto Trait Implementations§

§

impl<C, R> Freeze for FutureProducer<C, R>

§

impl<C = DefaultClientContext, R = TokioRuntime> !RefUnwindSafe for FutureProducer<C, R>

§

impl<C, R> Send for FutureProducer<C, R>
where R: Send,

§

impl<C, R> Sync for FutureProducer<C, R>
where R: Sync,

§

impl<C, R> Unpin for FutureProducer<C, R>
where R: Unpin,

§

impl<C = DefaultClientContext, R = TokioRuntime> !UnwindSafe for FutureProducer<C, R>

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> CloneToUninit for T
where T: Clone,

source§

default unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

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> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

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

§

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>,

§

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<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