opción
HogarHogar Skill Desarrollo de API azure-servicebus-rust

azure-servicebus-rust

microsoft/skills microsoft/skills

Enviar y recibir mensajes utilizando colas, temas y suscripciones de Azure Service Bus desde aplicaciones Rust.

...Expandir todo
8
Tiempo actualizado 13 de septiembre de 2026

Biblioteca de Azure Service Bus para Rust

Biblioteca cliente para Azure Service Bus: un corredor de mensajes empresarial con colas y temas de publicación-suscripción.

⚠️ ADVERTENCIA: Este crate está en desarrollo temprano y NO DEBE utilizarse en producción. Las API pueden cambiar sin previo aviso.

Utilice esta habilidad cuando:

  • Una aplicación necesite enviar o recibir mensajes a través de Azure Service Bus desde Rust
  • Necesite mensajería basada en colas con consumidores competitivos
  • Necesite mensajería de publicación-suscripción con temas y suscripciones
  • Necesite entrega fiable de mensajes con semántica de finalización

IMPORTANTE: Utilice únicamente el crate oficial azure_messaging_servicebus publicado por el usuario de crates.io azure-sdk. NO utilice crates no oficiales o de la comunidad. Los crates oficiales utilizan guiones bajos en los nombres y ninguno tiene la versión 0.21.0.

Instalación

cargo add azure_messaging_servicebus azure_identity tokio

Si su código utiliza tipos azure_core directamente, añada azure_core a Cargo.toml. Si solo utiliza reexportaciones de azure_messaging_servicebus, la dependencia directa de azure_core es opcional.

Variables de entorno

SERVICEBUS_NAMESPACE=<namespace>.servicebus.windows.net # Obligatorio — nombre completo del espacio de nombres
</namespace>

Conceptos clave

ConceptoDescripción
**Espacio de nombres**Contenedor de todos los componentes de mensajería
**Cola**Mensajería punto a punto con consumidores competitivos
**Tema**Mensajería de publicación-suscripción: un emisor, muchos suscriptores
**Suscripción**Recibe mensajes de un tema
**Mensaje**Paquete de datos y metadatos, con semántica de finalización/abandono

Autenticación

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

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

Flujo de trabajo principal

Enviar un mensaje a una cola

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

Recibir mensajes de una cola

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

Enviar un mensaje a un tema

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

Recibir mensajes de una suscripción

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

Liquidación de mensajes

AcciónPropósito
`complete`Eliminar el mensaje de la cola: procesamiento correcto
`abandon`Liberar el bloqueo: el mensaje queda disponible para reintento

Finalice siempre los mensajes tras un procesamiento correcto para evitar su reenvío.

Roles de RBAC

Para la autenticación con Entra ID, asigne uno de estos roles:

RolAcceso
`Azure Service Bus Data Sender`Enviar mensajes
`Azure Service Bus Data Receiver`Recibir mensajes
`Azure Service Bus Data Owner`Acceso completo

Mejores prácticas

  1. Utilice cargo add para gestionar las dependencias; nunca edite Cargo.toml directamente. Añada y elimine dependencias del SDK de Rust con comandos de cargo en lugar de ediciones manifiestas manuales.
  2. Añada azure_core solo cuando importe tipos azure_core directamente. Si su código importa azure_core::http::Url, azure_core::http::RequestContent o azure_core::error::ErrorKind, incluya azure_core; en caso contrario, una dependencia directa es opcional.
  3. Utilice DeveloperToolsCredential para el desarrollo local, ManagedIdentityCredential para producción: Rust no proporciona un único tipo DefaultAzureCredential
  4. Nunca codifique las credenciales en el código: utilice variables de entorno o identidad gestionada
  5. Asigne roles RBAC: asegúrese de que la identidad tenga los roles de datos de Service Bus adecuados
  6. Finalice siempre los mensajes: llame a complete_message tras el procesamiento para eliminarlos de la cola
  7. Utilice temas para la difusión: cuando varios consumidores necesiten los mismos mensajes, utilice temas con suscripciones
  8. Este crate es pre-producción: las API pueden cambiar; fije la versión de su dependencia con comandos de cargo en su flujo de trabajo de dependencias

Enlaces de referencia

RecursoEnlace
Referencia de la APIhttps://docs.rs/azure\_messaging\_servicebus/latest/azure\_messaging\_servicebus
crates.iohttps://crates.io/crates/azure\_messaging\_servicebus
Código fuentehttps://github.com/Azure/azure-sdk-for-rust/tree/main/sdk/servicebus/azure\_messaging\_servicebus
Ver en 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 |

Todos los archivos

0 archivos

Instalar azure-servicebus-rust

Descarga y extrae los archivos de habilidades en tu directorio .claude/skills/.

Descargar ZIP

Clona el repositorio y copia los archivos de la habilidad a tu proyecto.

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

Copiar Copiar
Configuración rápida: Copia la carpeta de la habilidad a .claude/skills/ Claude detectará y utilizará automáticamente la habilidad
Repositorio microsoft/skills

Habilidades relacionadas

agentwallet
Tiempo actualizado 7 de julio de 2026
brightdata-cli
Tiempo actualizado 29 de junio de 2026
humanize
Tiempo actualizado 7 de julio de 2026
korean-stock-search
Tiempo actualizado 8 de julio de 2026
OR