pub trait MessageQueueSelector<M: MessageTrait, A>: Send + Sync {
// Required method
fn select(
&self,
mqs: &[MessageQueue],
msg: &M,
arg: &A,
) -> Option<MessageQueue>;
}Expand description
A trait for selecting a message queue from a list of available queues.
This trait provides a zero-cost abstraction for queue selection logic using compile-time monomorphization. Implement this trait for your custom selector logic, or use closures directly as they automatically implement this trait.
§Type Parameters
M- Message type that implementsMessageTraitA- Argument type for custom selection logic
§Performance
This trait uses compile-time generics, allowing the compiler to:
- Fully inline the selector function
- Eliminate dynamic dispatch overhead
- Perform aggressive optimizations
§Example
use rocketmq_client_rust::producer::message_queue_selector::MessageQueueSelector;
use rocketmq_common::common::message::message_queue::MessageQueue;
use rocketmq_common::common::message::message_single::Message;
// Closures automatically implement MessageQueueSelector
let selector = |mqs: &[MessageQueue], _msg: &Message, order_id: &i64| {
let index = (*order_id % mqs.len() as i64) as usize;
mqs.get(index).cloned()
};Required Methods§
Sourcefn select(&self, mqs: &[MessageQueue], msg: &M, arg: &A) -> Option<MessageQueue>
fn select(&self, mqs: &[MessageQueue], msg: &M, arg: &A) -> Option<MessageQueue>
Implementors§
impl<F, M, A> MessageQueueSelector<M, A> for F
Implement MessageQueueSelector for all compatible closures and functions.
This allows closures to be used directly as selectors without explicit trait implementation.