pub struct AzureServiceBusProvider { /* private fields */ }Expand description
Azure Service Bus queue provider implementation using REST API
This provider implements the QueueProvider trait using Azure Service Bus REST API. It supports:
- Multiple authentication methods (connection string, managed identity, service principal)
- HTTP-based message operations (send, receive, complete, abandon, dead-letter)
- Session support for ordered processing
- Lock token management for PeekLock receive mode
- Comprehensive error classification with retry logic
Implementations§
Source§impl AzureServiceBusProvider
impl AzureServiceBusProvider
Sourcepub async fn new(config: AzureServiceBusConfig) -> Result<Self, AzureError>
pub async fn new(config: AzureServiceBusConfig) -> Result<Self, AzureError>
Create new Azure Service Bus provider
§Arguments
config- Azure Service Bus configuration with authentication details
§Errors
Returns error if:
- Connection string is invalid
- Authentication fails
- Namespace is not accessible
§Example
use queue_runtime::{AzureServiceBusConfig, AzureAuthMethod};
use queue_runtime::providers::AzureServiceBusProvider;
use chrono::Duration;
let config = AzureServiceBusConfig {
connection_string: Some("Endpoint=sb://...".to_string()),
namespace: None,
auth_method: AzureAuthMethod::ConnectionString,
use_sessions: true,
session_timeout: Duration::minutes(5),
};
let provider = AzureServiceBusProvider::new(config).await?;Trait Implementations§
Source§impl Debug for AzureServiceBusProvider
impl Debug for AzureServiceBusProvider
Source§impl QueueProvider for AzureServiceBusProvider
impl QueueProvider for AzureServiceBusProvider
Source§fn send_message<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
queue: &'life1 QueueName,
message: &'life2 Message,
) -> Pin<Box<dyn Future<Output = Result<MessageId, QueueError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn send_message<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
queue: &'life1 QueueName,
message: &'life2 Message,
) -> Pin<Box<dyn Future<Output = Result<MessageId, QueueError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Send single message
Source§fn send_messages<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
queue: &'life1 QueueName,
messages: &'life2 [Message],
) -> Pin<Box<dyn Future<Output = Result<Vec<MessageId>, QueueError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn send_messages<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
queue: &'life1 QueueName,
messages: &'life2 [Message],
) -> Pin<Box<dyn Future<Output = Result<Vec<MessageId>, QueueError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Send multiple messages
Source§fn receive_message<'life0, 'life1, 'async_trait>(
&'life0 self,
queue: &'life1 QueueName,
timeout: Duration,
) -> Pin<Box<dyn Future<Output = Result<Option<ReceivedMessage>, QueueError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn receive_message<'life0, 'life1, 'async_trait>(
&'life0 self,
queue: &'life1 QueueName,
timeout: Duration,
) -> Pin<Box<dyn Future<Output = Result<Option<ReceivedMessage>, QueueError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Receive single message
Source§fn receive_messages<'life0, 'life1, 'async_trait>(
&'life0 self,
queue: &'life1 QueueName,
max_messages: u32,
timeout: Duration,
) -> Pin<Box<dyn Future<Output = Result<Vec<ReceivedMessage>, QueueError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn receive_messages<'life0, 'life1, 'async_trait>(
&'life0 self,
queue: &'life1 QueueName,
max_messages: u32,
timeout: Duration,
) -> Pin<Box<dyn Future<Output = Result<Vec<ReceivedMessage>, QueueError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Receive multiple messages
Source§fn complete_message<'life0, 'life1, 'async_trait>(
&'life0 self,
receipt: &'life1 ReceiptHandle,
) -> Pin<Box<dyn Future<Output = Result<(), QueueError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn complete_message<'life0, 'life1, 'async_trait>(
&'life0 self,
receipt: &'life1 ReceiptHandle,
) -> Pin<Box<dyn Future<Output = Result<(), QueueError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Complete message processing
Source§fn abandon_message<'life0, 'life1, 'async_trait>(
&'life0 self,
receipt: &'life1 ReceiptHandle,
) -> Pin<Box<dyn Future<Output = Result<(), QueueError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn abandon_message<'life0, 'life1, 'async_trait>(
&'life0 self,
receipt: &'life1 ReceiptHandle,
) -> Pin<Box<dyn Future<Output = Result<(), QueueError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Abandon message for retry
Source§fn dead_letter_message<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
receipt: &'life1 ReceiptHandle,
reason: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<(), QueueError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn dead_letter_message<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
receipt: &'life1 ReceiptHandle,
reason: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<(), QueueError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Send to dead letter queue
Source§fn create_session_client<'life0, 'life1, 'async_trait>(
&'life0 self,
_queue: &'life1 QueueName,
_session_id: Option<SessionId>,
) -> Pin<Box<dyn Future<Output = Result<Box<dyn SessionProvider>, QueueError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn create_session_client<'life0, 'life1, 'async_trait>(
&'life0 self,
_queue: &'life1 QueueName,
_session_id: Option<SessionId>,
) -> Pin<Box<dyn Future<Output = Result<Box<dyn SessionProvider>, QueueError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Create session client
Source§fn provider_type(&self) -> ProviderType
fn provider_type(&self) -> ProviderType
Get provider type
Source§fn supports_sessions(&self) -> SessionSupport
fn supports_sessions(&self) -> SessionSupport
Get session support level
Source§fn supports_batching(&self) -> bool
fn supports_batching(&self) -> bool
Check batch operation support
Source§fn max_batch_size(&self) -> u32
fn max_batch_size(&self) -> u32
Get maximum batch size
Auto Trait Implementations§
impl Freeze for AzureServiceBusProvider
impl !RefUnwindSafe for AzureServiceBusProvider
impl Send for AzureServiceBusProvider
impl Sync for AzureServiceBusProvider
impl Unpin for AzureServiceBusProvider
impl UnsafeUnpin for AzureServiceBusProvider
impl !UnwindSafe for AzureServiceBusProvider
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more