옵션
집 Skill API 개발 azure-servicebus-rust

azure-servicebus-rust

microsoft/skills microsoft/skills

Rust 애플리케이션에서 Azure Service Bus 큐, 토픽 및 구독을 사용하여 메시지를 보내고 받습니다.

...모든 것을 확장하십시오
8
업데이트 된 시간 2026년 9월 13일

Rust용 Azure Service Bus 라이브러리

Azure Service Bus용 클라이언트 라이브러리 — 큐와 발행-구독 토픽을 갖춘 엔터프라이즈 메시지 브로커입니다.

⚠️ 경고: 이 크레이트는 초기 개발 단계에 있으며 프로덕션 환경에서 사용해서는 안 됩니다. API는 사전 고지 없이 변경될 수 있습니다.

다음 상황에서 이 기능을 사용하십시오:

  • 애플리케이션이 Rust에서 Azure Service Bus를 통해 메시지를 보내거나 받아야 하는 경우
  • 경쟁 소비자 모델을 기반으로 한 큐 기반 메시징이 필요한 경우
  • 토픽과 구독을 갖춘 발행-구독 메시징이 필요한 경우
  • 완료 세맨틱스를 갖춘 신뢰할 수 있는 메시지 전달이 필요한 경우

중요: azure-sdk crates.io 사용자에 의해 게시된 공식 azure_messaging_servicebus 크레이트만 사용하십시오. 비공식 또는 커뮤니티 크레이트를 사용하지 마십시오. 공식 크레이트는 이름에 밑줄을 사용하며, 버전 0.21.0인 크레이트는 없습니다.

설치

cargo add azure_messaging_servicebus azure_identity tokio

코드에서 azure_core 형식을 직접 사용하는 경우 Cargo.tomlazure_core를 추가하십시오. azure_messaging_servicebus의 재내보내기만 사용하는 경우 azure_core에 대한 직접적인 종속성은 선택 사항입니다.

환경 변수

SERVICEBUS_NAMESPACE=<namespace>.servicebus.windows.net # 필수 — 전체 지정 네임스페이스
</namespace>

핵심 개념

개념설명
**네임스페이스**모든 메시징 구성요소의 컨테이너
**큐**경쟁 소비자를 갖춘 점대점 메시징
**토픽**발행-구독 메시징 — 한 명의 발신자, 여러 구독자
**구독**토픽에서 메시지 수신
**메시지**데이터와 메타데이터의 패키지, 완료/포기 세맨틱스 포함

인증

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

#[tokio::main]
async fn main() -> Result> {
    // 로컬 개발: DeveloperToolsCredential. 프로덕션: ManagedIdentityCredential 사용.
    let credential = DeveloperToolsCredential::new(None)?;
    let client = ServiceBusClient::builder()
        .open("your_namespace.servicebus.windows.net", credential.clone())
        .await?;
    Ok(())
}

핵심 워크플로우

큐로 메시지 보내기

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

큐에서 메시지 받기

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

토픽으로 메시지 보내기

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

구독에서 메시지 받기

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

메시지 처리

작업목적
`complete`큐에서 메시지 제거 — 처리 성공
`abandon`잠금 해제 — 메시지가 재시도 가능 상태로 전환

처리 성공 후 항상 메시지를 완료하여 다시 전달되는 것을 방지하십시오.

RBAC 역할

Entra ID 인증의 경우 다음 역할 중 하나를 할당하십시오:

역할접근 권한
`Azure Service Bus Data Sender`메시지 보내기
`Azure Service Bus Data Receiver`메시지 받기
`Azure Service Bus Data Owner`전체 접근 권한

모범 사례

  1. cargo add를 사용하여 종속성을 관리하고 Cargo.toml을 직접 편집하지 마십시오. 수동 매니페스트 편집 대신 cargo 명령어를 사용하여 Rust SDK 종속성을 추가하고 제거하십시오.
  2. azure_core 형식을 직접 가져올 때만 azure_core를 추가하십시오. 코드에서 azure_core::http::Url, azure_core::http::RequestContent, 또는 azure_core::error::ErrorKind를 가져오는 경우 azure_core를 포함하십시오. 그렇지 않으면 직접적인 종속성은 선택 사항입니다.
  3. 로컬 개발에는 DeveloperToolsCredential을, 프로덕션에는 ManagedIdentityCredential을 사용하십시오. Rust는 단일 DefaultAzureCredential 형식을 제공하지 않습니다.
  4. 자격 증명을 하드코딩하지 마십시오. 환경 변수 또는 관리된 신원(ID)을 사용하십시오.
  5. RBAC 역할을 할당하십시오. 신원에 적절한 Service Bus 데이터 역할이 있는지 확인하십시오.
  6. 항상 메시지를 완료하십시오. 처리 후 complete_message를 호출하여 큐에서 제거하십시오.
  7. 확산을 위해 토픽을 사용하십시오. 여러 소비자가 동일한 메시지를 필요로 할 때 구독이 있는 토픽을 사용하십시오.
  8. 이 크레이트는 프로덕션 준비가 되지 않았습니다. API가 변경될 수 있으므로 종속성 워크플로우에서 cargo 명령어를 사용하여 종속성 버전을 고정하십시오.

참조 링크

리소스링크
API 참조https://docs.rs/azure\_messaging\_servicebus/latest/azure\_messaging\_servicebus
crates.iohttps://crates.io/crates/azure\_messaging\_servicebus
소스 코드https://github.com/Azure/azure-sdk-for-rust/tree/main/sdk/servicebus/azure\_messaging\_servicebus
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 |

모든 파일

0개 파일

azure-servicebus-rust 설치

스킬 파일을 다운로드하여 .claude/skills/ 디렉토리에 추출하세요.

ZIP 다운로드

저장소를 클론하고 스킬 파일을 프로젝트에 복사하세요.

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

복사 복사
빠른 설정: 스킬 폴더를 .claude/skills/에 복사하세요. Claude는 자동으로 해당 스킬을 감지하고 사용합니다.
저장소 microsoft/skills

관련 스킬

brightdata-cli
업데이트 된 시간 2026년 6월 29일
humanize
업데이트 된 시간 2026년 7월 7일
agentwallet
업데이트 된 시간 2026년 7월 7일
korean-stock-search
업데이트 된 시간 2026년 7월 8일
OR