option
MaisonMaison Skill Développement d'API azure-servicebus-rust

azure-servicebus-rust

microsoft/skills microsoft/skills

Envoyez et recevez des messages à l’aide des files d’attente, des sujets et des abonnements Azure Service Bus depuis des applications Rust.

...Développer tout
8
Heure mise à jour 13 septembre 2026

Bibliothèque Azure Service Bus pour Rust

Bibliothèque cliente pour Azure Service Bus — courtier de messages d'entreprise avec des files d'attente et des sujets de publication-souscription.

⚠️ AVERTISSEMENT : Ce crate est en développement précoce et NE DOIT PAS être utilisé en production. Les API peuvent changer sans préavis.

Utilisez cette compétence lorsque :

  • Une application doit envoyer ou recevoir des messages via Azure Service Bus depuis Rust
  • Vous avez besoin de messagerie basée sur les files d'attente avec des consommateurs en concurrence
  • Vous avez besoin de messagerie de type publication-souscription avec des sujets et des abonnements
  • Vous avez besoin d'une livraison fiable des messages avec des sémantiques de complétion

IMPORTANT : Utilisez uniquement le crate azure_messaging_servicebus officiel publié par l'utilisateur crates.io azure-sdk. N'utilisez PAS de crates non officiels ou communautaires. Les crates officiels utilisent des underscores dans les noms et aucun n'a la version 0.21.0.

Installation

cargo add azure_messaging_servicebus azure_identity tokio

Si votre code utilise des types azure_core directement, ajoutez azure_core à Cargo.toml. Si vous n'utilisez que les réexports de azure_messaging_servicebus, la dépendance directe vers azure_core est facultative.

Variables d'environnement

SERVICEBUS_NAMESPACE=<namespace>.servicebus.windows.net # Requis — nom de domaine entièrement qualifié
</namespace>

Concepts clés

ConceptDescription
**Nom de domaine**Conteneur pour tous les composants de messagerie
**File d'attente**Messagerie point-à-point avec des consommateurs en concurrence
**Sujet**Messagerie de type publication-souscription — un émetteur, plusieurs abonnés
**Abonnement**Reçoit des messages d'un sujet
**Message**Package de données et de métadonnées, avec des sémantiques de complétion/abandon

Authentification

use azure_identity::DeveloperToolsCredential;
use azure_messaging_servicebus::ServiceBusClient;

#[tokio::main]
async fn main() -> Result> {
    // Développement local : DeveloperToolsCredential. Production : utilisez ManagedIdentityCredential.
    let credential = DeveloperToolsCredential::new(None)?;
    let client = ServiceBusClient::builder()
        .open("your_namespace.servicebus.windows.net", credential.clone())
        .await?;
    Ok(())
}

Flux de travail principal

Envoyer un message à une file d'attente

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(())
}

Recevoir des messages d'une file d'attente

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(())
}

Envoyer un message à un sujet

let sender = client.create_sender("my_topic", None).await?;
let message = Message::from("Hello, Topic subscribers!");
sender.send_message(message, None).await?;

Recevoir des messages d'un abonnement

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?;
}

Règlement des messages

ActionObjectif
`complete`Supprimer le message de la file d'attente — traitement réussi
`abandon`Libérer le verrou — le message devient disponible pour une nouvelle tentative

Toujours compléter les messages après un traitement réussi pour éviter leur nouvelle livraison.

Rôles RBAC

Pour l'authentification Entra ID, attribuez l'un de ces rôles :

RôleAccès
`Azure Service Bus Data Sender`Envoyer des messages
`Azure Service Bus Data Receiver`Recevoir des messages
`Azure Service Bus Data Owner`Accès complet

Meilleures pratiques

  1. Utilisez cargo add pour gérer les dépendances, ne modifiez jamais Cargo.toml directement. Ajoutez et supprimez les dépendances du SDK Rust avec des commandes cargo au lieu de modifications manuelles du manifeste.
  2. Ajoutez azure_core uniquement lorsque vous importez directement des types azure_core. Si votre code importe azure_core::http::Url, azure_core::http::RequestContent ou azure_core::error::ErrorKind, incluez azure_core; sinon, une dépendance directe est facultative.
  3. Utilisez DeveloperToolsCredential pour le développement local, ManagedIdentityCredential pour la production — Rust ne fournit pas de type unique DefaultAzureCredential
  4. Ne mettez jamais les identifiants en dur — utilisez des variables d'environnement ou une identité gérée
  5. Attribuez des rôles RBAC — assurez-vous que l'identité dispose des rôles de données Service Bus appropriés
  6. Toujours compléter les messages — appelez complete_message après le traitement pour les supprimer de la file d'attente
  7. Utilisez des sujets pour la diffusion — lorsque plusieurs consommateurs ont besoin des mêmes messages, utilisez des sujets avec des abonnements
  8. Ce crate est en pré-production — les API peuvent changer ; épinglez la version de votre dépendance avec des commandes cargo dans votre flux de travail de dépendance

Liens de référence

RessourceLien
Référence de l'APIhttps://docs.rs/azure\_messaging\_servicebus/latest/azure\_messaging\_servicebus
crates.iohttps://crates.io/crates/azure\_messaging\_servicebus
Code sourcehttps://github.com/Azure/azure-sdk-for-rust/tree/main/sdk/servicebus/azure\_messaging\_servicebus
Voir sur GitHub
---
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 |

Tous les fichiers

0 fichiers

Installer azure-servicebus-rust

Téléchargez et extrayez les fichiers de compétences dans votre répertoire .claude/skills/.

Télécharger le ZIP

Clonez le dépôt et copiez les fichiers de compétence dans votre projet.

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

Copier Copier
Configuration rapide: Copiez le dossier de la compétence dans .claude/skills/ Claude détectera et utilisera automatiquement la compétence

Compétences similaires

brightdata-cli
Heure mise à jour 29 juin 2026
humanize
Heure mise à jour 7 juillet 2026
agentwallet
Heure mise à jour 7 juillet 2026
korean-stock-search
Heure mise à jour 8 juillet 2026
OR