azure-servicebus-rust
microsoft/skills
Rust 애플리케이션에서 Azure Service Bus 큐, 토픽 및 구독을 사용하여 메시지를 보내고 받습니다.
...모든 것을 확장하십시오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.toml에azure_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` | 전체 접근 권한 |
모범 사례
cargo add를 사용하여 종속성을 관리하고Cargo.toml을 직접 편집하지 마십시오. 수동 매니페스트 편집 대신 cargo 명령어를 사용하여 Rust SDK 종속성을 추가하고 제거하십시오.azure_core형식을 직접 가져올 때만azure_core를 추가하십시오. 코드에서azure_core::http::Url,azure_core::http::RequestContent, 또는azure_core::error::ErrorKind를 가져오는 경우azure_core를 포함하십시오. 그렇지 않으면 직접적인 종속성은 선택 사항입니다.- 로컬 개발에는
DeveloperToolsCredential을, 프로덕션에는ManagedIdentityCredential을 사용하십시오. Rust는 단일DefaultAzureCredential형식을 제공하지 않습니다. - 자격 증명을 하드코딩하지 마십시오. 환경 변수 또는 관리된 신원(ID)을 사용하십시오.
- RBAC 역할을 할당하십시오. 신원에 적절한 Service Bus 데이터 역할이 있는지 확인하십시오.
- 항상 메시지를 완료하십시오. 처리 후
complete_message를 호출하여 큐에서 제거하십시오. - 확산을 위해 토픽을 사용하십시오. 여러 소비자가 동일한 메시지를 필요로 할 때 구독이 있는 토픽을 사용하십시오.
- 이 크레이트는 프로덕션 준비가 되지 않았습니다. API가 변경될 수 있으므로 종속성 워크플로우에서 cargo 명령어를 사용하여 종속성 버전을 고정하십시오.
참조 링크
| 리소스 | 링크 |
|---|---|
| API 참조 | https://docs.rs/azure\_messaging\_servicebus/latest/azure\_messaging\_servicebus |
| crates.io | https://crates.io/crates/azure\_messaging\_servicebus |
| 소스 코드 | 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 |
모든 파일
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
복사





집
