Struct nats::Connection
source · [−]pub struct Connection(_);
Expand description
A NATS connection.
Implementations
sourceimpl Connection
impl Connection
sourcepub fn subscribe(&self, subject: &str) -> Result<Subscription>
pub fn subscribe(&self, subject: &str) -> Result<Subscription>
sourcepub fn queue_subscribe(
&self,
subject: &str,
queue: &str
) -> Result<Subscription>
pub fn queue_subscribe(
&self,
subject: &str,
queue: &str
) -> Result<Subscription>
Create a queue subscription for the given NATS connection.
Example
let sub = nc.queue_subscribe("foo", "production")?;
sourcepub fn publish_request(
&self,
subject: &str,
reply: &str,
msg: impl AsRef<[u8]>
) -> Result<()>
pub fn publish_request(
&self,
subject: &str,
reply: &str,
msg: impl AsRef<[u8]>
) -> Result<()>
Publish a message on the given subject with a reply subject for responses.
Example
let reply = nc.new_inbox();
let rsub = nc.subscribe(&reply)?;
nc.publish_request("foo", &reply, "Help me!")?;
sourcepub fn new_inbox(&self) -> String
pub fn new_inbox(&self) -> String
Create a new globally unique inbox which can be used for replies.
Example
let reply = nc.new_inbox();
let rsub = nc.subscribe(&reply)?;
sourcepub fn request(&self, subject: &str, msg: impl AsRef<[u8]>) -> Result<Message>
pub fn request(&self, subject: &str, msg: impl AsRef<[u8]>) -> Result<Message>
Publish a message on the given subject as a request and receive the response.
Example
let resp = nc.request("foo", "Help me?")?;
sourcepub fn request_timeout(
&self,
subject: &str,
msg: impl AsRef<[u8]>,
timeout: Duration
) -> Result<Message>
pub fn request_timeout(
&self,
subject: &str,
msg: impl AsRef<[u8]>,
timeout: Duration
) -> Result<Message>
Publish a message on the given subject as a request and receive the response. This call will return after the timeout duration if no response is received.
Example
let resp = nc.request_timeout("foo", "Help me?", std::time::Duration::from_secs(2))?;
sourcepub fn request_multi(
&self,
subject: &str,
msg: impl AsRef<[u8]>
) -> Result<Subscription>
pub fn request_multi(
&self,
subject: &str,
msg: impl AsRef<[u8]>
) -> Result<Subscription>
Publish a message on the given subject as a request and allow multiple responses.
Example
for msg in nc.request_multi("foo", "Help")?.iter().take(1) {}
sourcepub fn flush(&self) -> Result<()>
pub fn flush(&self) -> Result<()>
Flush a NATS connection by sending a PING
protocol and waiting for the
responding PONG
. Will fail with TimedOut
if the server does not
respond with in 10 seconds. Will fail with NotConnected
if the
server is not currently connected. Will fail with BrokenPipe
if
the connection to the server is lost.
Example
nc.flush()?;
sourcepub fn flush_timeout(&self, duration: Duration) -> Result<()>
pub fn flush_timeout(&self, duration: Duration) -> Result<()>
Flush a NATS connection by sending a PING
protocol and waiting for the
responding PONG
. Will fail with TimedOut
if the server takes
longer than this duration to respond. Will fail with NotConnected
if the server is not currently connected. Will fail with
BrokenPipe
if the connection to the server is lost.
Example
nc.flush()?;
sourcepub fn close(self)
pub fn close(self)
Close a NATS connection. All clones of
this Connection
will also be closed,
as the backing IO threads are shared.
If the client is currently connected to a server, the outbound write buffer will be flushed in the process of shutting down.
Example
nc.close();
sourcepub fn rtt(&self) -> Result<Duration>
pub fn rtt(&self) -> Result<Duration>
Calculates the round trip time between this client and the server,
if the server is currently connected. Fails with TimedOut
if
the server takes more than 10 seconds to respond.
Example
println!("server rtt: {:?}", nc.rtt());
sourcepub fn is_server_compatible_version(
&self,
major: i64,
minor: i64,
patch: i64
) -> bool
pub fn is_server_compatible_version(
&self,
major: i64,
minor: i64,
patch: i64
) -> bool
Returns true if the version is compatible with the version components.
sourcepub fn client_ip(&self) -> Result<IpAddr>
pub fn client_ip(&self) -> Result<IpAddr>
Returns the client IP as known by the server. Supported as of server version 2.1.6.
Example
println!("ip: {:?}", nc.client_ip());
sourcepub fn client_id(&self) -> u64
pub fn client_id(&self) -> u64
Returns the client ID as known by the most recently connected server.
Example
println!("ip: {:?}", nc.client_id());
sourcepub fn drain(&self) -> Result<()>
pub fn drain(&self) -> Result<()>
Send an unsubscription for all subs 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 for the Subscription
struct which will drain
a single Subscription
without shutting down the entire connection
afterward.
Example
let received = Arc::new(AtomicBool::new(false));
let received_2 = received.clone();
nc.subscribe("test.drain")?.with_handler(move |m| {
received_2.store(true, SeqCst);
Ok(())
});
nc.publish("test.drain", "message")?;
nc.drain()?;
assert!(received.load(SeqCst));
sourcepub fn publish_with_reply_or_headers(
&self,
subject: &str,
reply: Option<&str>,
headers: Option<&HeaderMap>,
msg: impl AsRef<[u8]>
) -> Result<()>
pub fn publish_with_reply_or_headers(
&self,
subject: &str,
reply: Option<&str>,
headers: Option<&HeaderMap>,
msg: impl AsRef<[u8]>
) -> Result<()>
Publish a message which may have a reply subject or headers set.
Example
let sub = nc.subscribe("foo.headers")?;
let headers = [("header1", "value1"),
("header2", "value2")].iter().collect();
let reply_to = None;
nc.publish_with_reply_or_headers("foo.headers", reply_to, Some(&headers), "Hello World!")?;
nc.flush()?;
let message = sub.next_timeout(std::time::Duration::from_secs(2)).unwrap();
assert_eq!(message.headers.unwrap().len(), 2);
sourcepub fn max_payload(&self) -> usize
pub fn max_payload(&self) -> usize
Returns the maximum payload size the most recently connected server will accept.
Example
let nc = nats::connect("demo.nats.io")?;
println!("max payload: {:?}", nc.max_payload());
Trait Implementations
sourceimpl Clone for Connection
impl Clone for Connection
sourcefn clone(&self) -> Connection
fn clone(&self) -> Connection
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
Auto Trait Implementations
impl !RefUnwindSafe for Connection
impl Send for Connection
impl Sync for Connection
impl Unpin for Connection
impl !UnwindSafe for Connection
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more