Option
HeimHeim Skill API-Entwicklung azure-servicebus-rust

azure-servicebus-rust

microsoft/skills microsoft/skills

Senden und Empfangen von Nachrichten über Azure Service Bus-Warteschlangen, Themen und Abos aus Rust-Anwendungen heraus.

...Alle erweitern
8
Zeit aktualisiert 13. September 2026

Azure 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 Sie azure_core zu Cargo.toml hinzu. Wenn Sie nur von azure_messaging_servicebus exportierte Typen verwenden, ist die direkte Abhängigkeit von azure_core optional.

Umgebungsvariablen

SERVICEBUS_NAMESPACE=<namespace>.servicebus.windows.net # Erforderlich — vollständig qualifizierter Namespace
</namespace>

Grundlegende Konzepte

KonzeptBeschreibung
**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

AktionZweck
`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:

RolleZugriff
`Azure Service Bus Data Sender`Nachrichten senden
`Azure Service Bus Data Receiver`Nachrichten empfangen
`Azure Service Bus Data Owner`Vollzugriff

Best Practices

  1. Verwenden Sie cargo add, um Abhängigkeiten zu verwalten, bearbeiten Sie Cargo.toml niemals direkt. Fügen Sie Rust-SDK-Abhängigkeiten mit cargo-Befehlen hinzu und entfernen Sie sie, anstatt Manifestdateien manuell zu bearbeiten.
  2. Fügen Sie azure_core nur hinzu, wenn Sie azure_core-Typen direkt importieren. Wenn Ihr Code azure_core::http::Url, azure_core::http::RequestContent oder azure_core::error::ErrorKind importiert, fügen Sie azure_core hinzu; andernfalls ist eine direkte Abhängigkeit optional.
  3. Verwenden Sie DeveloperToolsCredential für die lokale Entwicklung, ManagedIdentityCredential für die Produktion — Rust stellt keinen einzelnen DefaultAzureCredential-Typ bereit
  4. Speichern Sie Anmeldeinformationen niemals hartkodiert — verwenden Sie Umgebungsvariablen oder verwaltete Identität
  5. Weisen Sie RBAC-Rollen zu — stellen Sie sicher, dass die Identität über die entsprechenden Service Bus-Datenrollen verfügt
  6. Schließen Sie Nachrichten immer ab — rufen Sie complete_message nach der Verarbeitung auf, um sie aus der Warteschlange zu entfernen
  7. Verwenden Sie Themen für Fan-Out — wenn mehrere Verbraucher dieselben Nachrichten benötigen, verwenden Sie Themen mit Abos
  8. Dieses Crate ist vorproduktionsreif — APIs können sich ändern; fixieren Sie Ihre Abhängigkeitsversion mit cargo-Befehlen in Ihrem Abhängigkeitsarbeitsablauf

Referenzlinks

RessourceLink
API-Referenzhttps://docs.rs/azure\_messaging\_servicebus/latest/azure\_messaging\_servicebus
crates.iohttps://crates.io/crates/azure\_messaging\_servicebus
Quellcodehttps://github.com/Azure/azure-sdk-for-rust/tree/main/sdk/servicebus/azure\_messaging\_servicebus
Auf GitHub ansehen
---
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 Dateien

azure-servicebus-rust installieren

Laden Sie die Skill-Dateien herunter und extrahieren Sie diese in Ihr .claude/skills/-Verzeichnis.

ZIP herunterladen

Klonen 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 Kopieren
Schnelle Einrichtung: Kopieren Sie den Ordner „skill“ nach .claude/skills/. Claude erkennt und verwendet die Fähigkeit automatisch.
Repository microsoft/skills

Ähnliche Skills

brightdata-cli
Zeit aktualisiert 29. Juni 2026
humanize
Zeit aktualisiert 7. Juli 2026
agentwallet
Zeit aktualisiert 7. Juli 2026
korean-stock-search
Zeit aktualisiert 8. Juli 2026
OR