azure-servicebus-rust
microsoft/skills
Senden und Empfangen von Nachrichten über Azure Service Bus-Warteschlangen, Themen und Abos aus Rust-Anwendungen heraus.
...Alle erweiternAzure Service Bus-Bibliothek für Rust
Client-Bibliothek für Azure Service Bus — Unternehmensnachrichtenbroker mit Warteschlangen und Publish-Subscribe-Themen.
⚠️ WARNUNG: Dieses Crate befindet sich in der frühen Entwicklungsphase und SOLLTE NICHT in der Produktion verwendet werden. APIs können sich ohne vorherige Ankündigung ändern.
Verwenden Sie diese Funktion, wenn:
- Eine Anwendung Nachrichten über Azure Service Bus von Rust aus senden oder empfangen muss
- Sie nachrichtenbasierte Kommunikation mit konkurrierenden Verbrauchern benötigen
- Sie Publish-Subscribe-Kommunikation mit Themen und Abos benötigen
- Sie eine zuverlässige Nachrichtenübermittlung mit Abschlusssemantik benötigen
WICHTIG: Verwenden Sie ausschließlich das offizielle
azure_messaging_servicebus-Crate, das vom azure-sdk-Benutzer auf crates.io veröffentlicht wurde. Verwenden Sie KEINE inoffiziellen oder Community-Crates. Offizielle Crates verwenden Unterstriche in den Namen und keines hat die Version 0.21.0.
Installation
cargo add azure_messaging_servicebus azure_identity tokio
Wenn Ihr Code
azure_core-Typen direkt verwendet, fügen Sieazure_corezuCargo.tomlhinzu. Wenn Sie nur vonazure_messaging_servicebusexportierte Typen verwenden, ist die direkte Abhängigkeit vonazure_coreoptional.
Umgebungsvariablen
SERVICEBUS_NAMESPACE=<namespace>.servicebus.windows.net # Erforderlich — vollständig qualifizierter Namespace
</namespace>Grundlegende Konzepte
| Konzept | Beschreibung |
|---|---|
| **Namespace** | Container für alle Nachrichtungskomponenten |
| **Warteschlange** | Punkt-zu-Punkt-Nachrichtenübermittlung mit konkurrierenden Verbrauchern |
| **Thema** | Publish-Subscribe-Nachrichtenübermittlung — ein Absender, viele Abonnenten |
| **Abonnement** | Empfängt Nachrichten von einem Thema |
| **Nachricht** | Daten- und Metadatenpaket mit Abschluss-/Aufhebungssemantik |
Authentifizierung
use azure_identity::DeveloperToolsCredential;
use azure_messaging_servicebus::ServiceBusClient;
#[tokio::main]
async fn main() -> Result> {
// Lokale Entwicklung: DeveloperToolsCredential. Produktion: Verwenden Sie ManagedIdentityCredential.
let credential = DeveloperToolsCredential::new(None)?;
let client = ServiceBusClient::builder()
.open("your_namespace.servicebus.windows.net", credential.clone())
.await?;
Ok(())
}
Hauptarbeitsablauf
Nachricht an eine Warteschlange senden
use azure_identity::DeveloperToolsCredential;
use azure_messaging_servicebus::{ServiceBusClient, Message};
#[tokio::main]
async fn main() -> Result> {
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(())
}
Nachrichten aus einer Warteschlange empfangen
use azure_identity::DeveloperToolsCredential;
use azure_messaging_servicebus::ServiceBusClient;
#[tokio::main]
async fn main() -> Result> {
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(())
}
Nachricht an ein Thema senden
let sender = client.create_sender("my_topic", None).await?;
let message = Message::from("Hello, Topic subscribers!");
sender.send_message(message, None).await?;
Nachrichten aus einem Abonnement empfangen
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?;
}
Nachrichtenabwicklung
| Aktion | Zweck |
|---|---|
| `complete` | Nachricht aus der Warteschlange entfernen — Verarbeitung erfolgreich |
| `abandon` | Sperre aufheben — Nachricht wird für erneuten Versuch verfügbar |
Schließen Sie Nachrichten nach erfolgreicher Verarbeitung immer ab, um eine erneute Zustellung zu verhindern.
RBAC-Rollen
Für Entra-ID-Authentifizierung weisen Sie eine der folgenden Rollen zu:
| Rolle | Zugriff |
|---|---|
| `Azure Service Bus Data Sender` | Nachrichten senden |
| `Azure Service Bus Data Receiver` | Nachrichten empfangen |
| `Azure Service Bus Data Owner` | Vollzugriff |
Best Practices
- Verwenden Sie
cargo add, um Abhängigkeiten zu verwalten, bearbeiten SieCargo.tomlniemals direkt. Fügen Sie Rust-SDK-Abhängigkeiten mit cargo-Befehlen hinzu und entfernen Sie sie, anstatt Manifestdateien manuell zu bearbeiten. - Fügen Sie
azure_corenur hinzu, wenn Sieazure_core-Typen direkt importieren. Wenn Ihr Codeazure_core::http::Url,azure_core::http::RequestContentoderazure_core::error::ErrorKindimportiert, fügen Sieazure_corehinzu; andernfalls ist eine direkte Abhängigkeit optional. - Verwenden Sie
DeveloperToolsCredentialfür die lokale Entwicklung,ManagedIdentityCredentialfür die Produktion — Rust stellt keinen einzelnenDefaultAzureCredential-Typ bereit - Speichern Sie Anmeldeinformationen niemals hartkodiert — verwenden Sie Umgebungsvariablen oder verwaltete Identität
- Weisen Sie RBAC-Rollen zu — stellen Sie sicher, dass die Identität über die entsprechenden Service Bus-Datenrollen verfügt
- Schließen Sie Nachrichten immer ab — rufen Sie
complete_messagenach der Verarbeitung auf, um sie aus der Warteschlange zu entfernen - Verwenden Sie Themen für Fan-Out — wenn mehrere Verbraucher dieselben Nachrichten benötigen, verwenden Sie Themen mit Abos
- Dieses Crate ist vorproduktionsreif — APIs können sich ändern; fixieren Sie Ihre Abhängigkeitsversion mit cargo-Befehlen in Ihrem Abhängigkeitsarbeitsablauf
Referenzlinks
| Ressource | Link |
|---|---|
| API-Referenz | https://docs.rs/azure\_messaging\_servicebus/latest/azure\_messaging\_servicebus |
| crates.io | https://crates.io/crates/azure\_messaging\_servicebus |
| Quellcode | https://github.com/Azure/azure-sdk-for-rust/tree/main/sdk/servicebus/azure\_messaging\_servicebus |
---
name: azure-servicebus-rust
description: Send and receive messages using Azure Service Bus queues, topics, and subscriptions from Rust applications.
license: MIT
---
# Azure Service Bus library for 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_servicebus` crate published by the [azure-sdk](https://crates.io/users/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
```sh
cargo add azure_messaging_servicebus azure_identity tokio
```
> If your code uses `azure_core` types directly, add `azure_core` to `Cargo.toml`. If you only use `azure_messaging_servicebus` re-exports, direct `azure_core` dependency is optional.
## Environment Variables
```bash
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
```rust
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
```rust
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
```rust
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
```rust
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
```rust
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
1. **Use `cargo add` to manage dependencies, never edit `Cargo.toml` directly.** Add and remove Rust SDK dependencies with cargo commands instead of manual manifest edits.
2. **Add `azure_core` only when importing `azure_core` types directly.** If your code imports `azure_core::http::Url`, `azure_core::http::RequestContent`, or `azure_core::error::ErrorKind`, include `azure_core`; otherwise a direct dependency is optional.
3. **Use `DeveloperToolsCredential`** for local dev, **`ManagedIdentityCredential`** for production — Rust does not provide a single `DefaultAzureCredential` type
4. **Never hardcode credentials** — use environment variables or managed identity
5. **Assign RBAC roles** — ensure the identity has appropriate Service Bus data roles
6. **Always complete messages** — call `complete_message` after processing to remove from queue
7. **Use topics for fan-out** — when multiple consumers need the same messages, use topics with subscriptions
8. **This crate is pre-production** — APIs may change; pin your dependency version with cargo commands in your dependency workflow
## Reference Links
| Resource | Link |
| ------------- | ----------------------------------------------------------------------------------------------- |
| API Reference | https://docs.rs/azure_messaging_servicebus/latest/azure_messaging_servicebus |
| crates.io | https://crates.io/crates/azure_messaging_servicebus |
| Source Code | https://github.com/Azure/azure-sdk-for-rust/tree/main/sdk/servicebus/azure_messaging_servicebus |
Alle Dateien
0 Dateienazure-servicebus-rust installieren
Laden Sie die Skill-Dateien herunter und extrahieren Sie diese in Ihr .claude/skills/-Verzeichnis.
ZIP herunterladenKlonen Sie das Repository und kopieren Sie die Skill-Dateien in Ihr Projekt.
git clone https://github.com/microsoft/skills/tree/main/.github/plugins/azure-sdk-rust/skills/azure-servicebus-rust # Copy SKILL.md to your .claude/skills/ directory
Kopieren





Heim
