Send and receive messages via Azure Service Bus in Rust
Rust client library for Azure Service Bus that enables queue-based and publish-subscribe messaging with reliable delivery and completion semantics.
Why it matters
Enable Rust applications to reliably send and receive messages through Azure Service Bus queues, topics, and subscriptions with enterprise-grade message broker capabilities and completion semantics.
Outcomes
What it gets done
Send messages to Azure Service Bus queues or topics from Rust code
Receive and process messages from queues with competing consumers
Subscribe to topics and handle publish-subscribe messaging patterns
Complete or abandon messages with proper settlement semantics
Install
Add it to your toolbox
Run in your project directory:
curl -fsSL https://spark.entire.vc/get/ag-azure-servicebus-rust | bash Overview
Azure Service Bus library for Rust
What it does
This skill provides the official azure_messaging_servicebus Rust crate for sending and receiving messages through Azure Service Bus. It supports queue-based messaging with competing consumers, publish-subscribe patterns using topics and subscriptions, and reliable message delivery with completion and abandon semantics.
How it connects
Use this skill when your Rust application needs to send or receive messages via Azure Service Bus, implement queue-based messaging with competing consumers, build publish-subscribe systems with topics and subscriptions, or require reliable message delivery with explicit completion semantics. Triggers include "service bus rust", "ServiceBusClient rust", "send message servicebus rust", "receive message servicebus rust", "queue rust messaging", and "topic subscription rust". Do NOT use this skill in production environments - the crate is in early development and APIs may change without notice
Source README
Azure Service Bus library for Rust
When to Use
Use this skill when you need azure Service Bus library for Rust. Send and receive messages using queues, topics, and subscriptions. Triggers: "service bus rust", "ServiceBusClient rust", "send message servicebus rust", "receive message servicebus rust", "queue rust messaging", "topic subscription rust".
Client library for Azure Service Bus - enterprise message broker with queues and publish-subscribe topics.
⚠️ WARNING: This crate is in early development and SHOULD NOT be used in production. APIs may change without notice.
Use this skill when:
- An app needs to send or receive messages via Azure Service Bus from Rust
- You need queue-based messaging with competing consumers
- You need publish-subscribe messaging with topics and subscriptions
- You need reliable message delivery with completion semantics
IMPORTANT: Only use the official
azure_messaging_servicebuscrate published by the azure-sdk crates.io user. Do NOT use unofficial or community crates. Official crates use underscores in names and none have version 0.21.0.
Installation
cargo add azure_messaging_servicebus azure_identity tokio
If your code uses
azure_coretypes directly, addazure_coretoCargo.toml. If you only useazure_messaging_servicebusre-exports, directazure_coredependency is optional.
Environment Variables
SERVICEBUS_NAMESPACE=<namespace>.servicebus.windows.net # Required — fully qualified namespace
Key Concepts
| Concept | Description |
|---|---|
| Namespace | Container for all messaging components |
| Queue | Point-to-point messaging with competing consumers |
| Topic | Publish-subscribe messaging - one sender, many subscribers |
| Subscription | Receives messages from a topic |
| Message | Package of data and metadata, with completion/abandon semantics |
Authentication
use azure_identity::DeveloperToolsCredential;
use azure_messaging_servicebus::ServiceBusClient;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Local dev: DeveloperToolsCredential. Production: use ManagedIdentityCredential.
let credential = DeveloperToolsCredential::new(None)?;
let client = ServiceBusClient::builder()
.open("your_namespace.servicebus.windows.net", credential.clone())
.await?;
Ok(())
}
Core Workflow
Send a Message to a Queue
use azure_identity::DeveloperToolsCredential;
use azure_messaging_servicebus::{ServiceBusClient, Message};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let credential = DeveloperToolsCredential::new(None)?;
let client = ServiceBusClient::builder()
.open("your_namespace.servicebus.windows.net", credential.clone())
.await?;
let sender = client.create_sender("my_queue", None).await?;
let message = Message::from("Hello, Service Bus!");
sender.send_message(message, None).await?;
Ok(())
}
Receive Messages from a Queue
use azure_identity::DeveloperToolsCredential;
use azure_messaging_servicebus::ServiceBusClient;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let credential = DeveloperToolsCredential::new(None)?;
let client = ServiceBusClient::builder()
.open("your_namespace.servicebus.windows.net", credential.clone())
.await?;
let receiver = client.create_receiver("my_queue", None).await?;
let messages = receiver.receive_messages(5, None).await?;
for message in messages {
println!("Received: {}", message.body_as_string()?);
receiver.complete_message(&message, None).await?;
}
Ok(())
}
Send a Message to a Topic
let sender = client.create_sender("my_topic", None).await?;
let message = Message::from("Hello, Topic subscribers!");
sender.send_message(message, None).await?;
Receive Messages from a Subscription
let receiver = client
.create_receiver_for_subscription("my_topic", "my_subscription", None)
.await?;
let messages = receiver.receive_messages(5, None).await?;
for message in messages {
println!("Received: {}", message.body_as_string()?);
receiver.complete_message(&message, None).await?;
}
Message Settlement
| Action | Purpose |
|---|---|
complete |
Remove message from queue - processing succeeded |
abandon |
Release lock - message becomes available for retry |
Always complete messages after successful processing to prevent redelivery.
RBAC Roles
For Entra ID auth, assign one of these roles:
| Role | Access |
|---|---|
Azure Service Bus Data Sender |
Send messages |
Azure Service Bus Data Receiver |
Receive messages |
Azure Service Bus Data Owner |
Full access |
Best Practices
- Use
cargo addto manage dependencies, never editCargo.tomldirectly. Add and remove Rust SDK dependencies with cargo commands instead of manual manifest edits. - Add
azure_coreonly when importingazure_coretypes directly. If your code importsazure_core::http::Url,azure_core::http::RequestContent, orazure_core::error::ErrorKind, includeazure_core; otherwise a direct dependency is optional. - Use
DeveloperToolsCredentialfor local dev,ManagedIdentityCredentialfor production - Rust does not provide a singleDefaultAzureCredentialtype - Never hardcode credentials - use environment variables or managed identity
- Assign RBAC roles - ensure the identity has appropriate Service Bus data roles
- Always complete messages - call
complete_messageafter processing to remove from queue - Use topics for fan-out - when multiple consumers need the same messages, use topics with subscriptions
- This crate is pre-production - APIs may change; pin your dependency version with cargo commands in your dependency workflow
Reference Links
Limitations
- Use this skill only when the task clearly matches its upstream source and local project context.
- Verify commands, generated code, dependencies, credentials, and external service behavior before applying changes.
- Do not treat examples as a substitute for environment-specific tests, security review, or user approval for destructive or costly actions.
Discussion
Questions & comments · 0
Sign In Sign in to leave a comment.