PubSubCommands in redis - Rust
Description: The PubSub trait allows subscribing to one or more channels and receiving a callback whenever a message arrives.

Skip to main content

## PubSubCommands

# Trait PubSubCommands

Source

    pub trait PubSubCommands: Sized {
        // Required methods
        fn subscribe<C, F, U>(&mut self, _: C, _: F) -> RedisResult<U>
           where F: FnMut(Msg) -> ControlFlow<U>,
                 C: ToRedisArgs;
        fn psubscribe<P, F, U>(&mut self, _: P, _: F) -> RedisResult<U>
           where F: FnMut(Msg) -> ControlFlow<U>,
                 P: ToRedisArgs;
    }

Expand description

The PubSub trait allows subscribing to one or more channels and receiving a callback whenever a message arrives.

Each method handles subscribing to the list of keys, waiting for messages, and unsubscribing from the same list of channels once a ControlFlow::Break is encountered.

Once (p)subscribe returns Ok(U), the connection is again safe to use for calling other methods.

## §Examples

    use redis::{PubSubCommands, ControlFlow};
    let client = redis::Client::open("redis://127.0.0.1/")?;
    let mut con = client.get_connection()?;
    let mut count = 0;
    con.subscribe(&["foo"], |msg| {
        // do something with message
        assert_eq!(msg.get_channel(), Ok(String::from("foo")));

        // increment messages seen counter
        count += 1;
        match count {
            // stop after receiving 10 messages
            10 => ControlFlow::Break(()),
            _ => ControlFlow::Continue,
        }
    })?;

## Required Methods§

Source

#### fn subscribe<C, F, U>(&mut self, _: C, _: F) -> RedisResult<U>
where F: FnMut(Msg) -> ControlFlow<U>, C: ToRedisArgs,

Subscribe to a list of channels using SUBSCRIBE and run the provided closure for each message received.

For every `Msg` passed to the provided closure, either `ControlFlow::Break` or `ControlFlow::Continue` must be returned. This method will not return until `ControlFlow::Break` is observed.

Source

#### fn psubscribe<P, F, U>(&mut self, _: P, _: F) -> RedisResult<U>
where F: FnMut(Msg) -> ControlFlow<U>, P: ToRedisArgs,

Subscribe to a list of channels using PSUBSCRIBE and run the provided closure for each message received.

For every `Msg` passed to the provided closure, either `ControlFlow::Break` or `ControlFlow::Continue` must be returned. This method will not return until `ControlFlow::Break` is observed.

## Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

## Implementors§

Source§

### impl PubSubCommands for Connection