Skip to main content

MessageQueueSelector

Trait MessageQueueSelector 

Source
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 implements MessageTrait
  • A - 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§

Source

fn select(&self, mqs: &[MessageQueue], msg: &M, arg: &A) -> Option<MessageQueue>

Selects a message queue from the provided list.

§Arguments
  • mqs - Available message queues to select from
  • msg - The message to be sent
  • arg - Custom argument for selection logic
§Returns

Selected MessageQueue, or None if no suitable queue is found

Implementors§

Source§

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.

Source§

impl<M, A> MessageQueueSelector<M, A> for SelectMessageQueueByHash
where M: MessageTrait, A: Hash,

Source§

impl<M, A> MessageQueueSelector<M, A> for SelectMessageQueueByRandom
where M: MessageTrait,