Struct nats::Subscription [−][src]
pub struct Subscription(_);
Expand description
A Subscription
receives Message
s published
to specific NATS Subject
s.
Implementations
Get a crossbeam Receiver for subscription messages.
Useful for crossbeam_channel::select
macro
Example
let sub1_ch = sub1.receiver();
let sub2_ch = sub2.receiver();
crossbeam_channel::select! {
recv(sub1_ch) -> msg => {
println!("Got message from sub1: {:?}", msg);
Ok(())
}
recv(sub2_ch) -> msg => {
println!("Got message from sub2: {:?}", msg);
Ok(())
}
}
Get the next message, or None if the subscription has been unsubscribed or the connection closed.
Example
if let Some(msg) = sub.next() {}
Try to get the next message, or None if no messages are present or if the subscription has been unsubscribed or the connection closed.
Example
if let Some(msg) = sub.try_next() {
println!("Received {}", msg);
}
Get the next message, or a timeout error if no messages are available for timout.
Example
if let Ok(msg) = sub.next_timeout(std::time::Duration::from_secs(1)) {}
Returns a blocking message iterator with a time deadline for blocking.
Example
for msg in sub.timeout_iter(std::time::Duration::from_secs(1)) {}
Attach a closure to handle messages. This closure will execute in a
separate thread. The result of this call is a Handler
which can
not be iterated and must be unsubscribed or closed directly to
unregister interest. A Handler
will not unregister interest with
the server when drop(&mut self)
is called.
Example
nc.subscribe("bar")?.with_handler(move |msg| {
println!("Received {}", &msg);
Ok(())
});
Unsubscribe a subscription immediately without draining.
Use drain
instead if you want any pending messages
to be processed by a handler, if one is configured.
Example
let sub = nc.subscribe("foo")?;
sub.unsubscribe()?;
Close a subscription. Same as unsubscribe
Use drain
instead if you want any pending messages
to be processed by a handler, if one is configured.
Example
let sub = nc.subscribe("foo")?;
sub.close()?;
Send an unsubscription then flush the connection, allowing any unprocessed messages to be handled by a handler function if one is configured.
After the flush returns, we know that a round-trip to the server has happened after it received our unsubscription, so we shut down the subscriber afterwards.
A similar method exists on the Connection
struct
which will drain all subscriptions for the NATS
client, and transition the entire system into
the closed state afterward.
Example
let mut sub = nc.subscribe("test.drain")?;
nc.publish("test.drain", "message")?;
sub.drain()?;
let mut received = false;
for _ in sub {
received = true;
}
assert!(received);
Trait Implementations
Auto Trait Implementations
impl !RefUnwindSafe for Subscription
impl Send for Subscription
impl Sync for Subscription
impl Unpin for Subscription
impl !UnwindSafe for Subscription
Blanket Implementations
Mutably borrows from an owned value. Read more
type Output = T
type Output = T
Should always be Self