azure servicebus queues and topics
DESCRIPTION
Overview of the API to control Queues and Topics in Azure AppFabric ServiceBusTRANSCRIPT
Igor MoochnickDirector, Cloud PlatformsBlueMetal [email protected] Blog: igorshare.wordpress.com
BrokerBroker
BrokerBroker
Feature Azure Queues Brokered Messaging
API REST, .NET .NET, REST, WCF
Authentication Storage Service HMAC Service Bus ACS
Maximum queue size 100TB 5GB
Maximum message size 64KB 256KB
Maximum message TTL 7 days 10,675,199 days
At most once delivery No Yes
At least once delivery Yes Yes
Maximum message lock 7 days 5 minutes
Hosted service affinity Yes No
Receive behavior Non-blocking Long polling (<24 days)
Throughput 5,000 msgs/second 800-3,000 msgs/sec
See: http://bit.ly/tY96CZ
Broker MessageBroker Message
BodyBody
PropertiesProperties
1
2
3
Management operations on the namespace Create/Delete/Exists for Queues, Topics, and Subscriptions
1
2
3
4
Creates client objects to interact with Queues, Topics, and Subscriptions. Anchor for connection management and multiplexing.
1
2
3
4
1
2
3
var queueClient = factory.CreateQueueClient(queueName);queueClient.Send(message);
queueClient.BeginSend(message, DoneSending, queueClient);
void DoneSending(IAsyncResult ar){ var queueClient = (QueueClient)ar.AsyncState; queueClient.EndSend(ar);
}
var sender = factory.CreateMessageSender(queueName);sender.Send(message);
1
2
3
Sending messages is done with Send or Begin/EndSend. You can send on the QueueClient or TopicClient or the neutral MessageSender.
var queueClient = factory.CreateQueueClient(queueName, ReceiveMode.ReceiveAndDelete);
var message = queueClient.Receive(TimeSpan.FromMinutes(1));if ( message != null ) { …
queueClient.BeginReceive(TimeSpan.FromMinutes(1), DoneReceiving, queueClient);
void DoneReceiving(IAsyncResult ar){ var queueClient = (QueueClient)ar.AsyncState; var message = queueClient.EndReceive(ar); if ( message != null ) { …
1
2
Destructive receives remove the messages from the queue as it is being taken from the broker. Higher throughput than Peek/Lock, but risk of message loss.
var queueClient = factory.CreateQueueClient(queueName, ReceiveMode.PeekLock);
var message = queueClient.Receive(TimeSpan.FromMinutes(1));if ( message != null ) { try { .. processing work .. message.Complete(); } catch { message.Abandon(); throw; }
1
Management operations on the namespace Create/Delete/Exists for Queues, Topics, and Subscriptions
1
2
3
var subClient = factory.CreateSubscriptionClient(topicName, subName, ReceiveMode.ReceiveAndDelete);
var message = subClient.Receive(TimeSpan.FromMinutes(1));if ( message != null ) { …
var rcv = factory.CreateMessageReceiver( SubscriptionClient.FormatSubscriptionPath(topicName, subName), ReceiveMode.ReceiveAndDelete);
var message = rcv.Receive(TimeSpan.FromMinutes(1));if ( message != null ) { …
1
2
Filter conditions operate on message properties Filter conditions operate on message properties and are expressed in SQL’92 syntax and are expressed in SQL’92 syntax
SET AuditRequired = 1
Filters actions may modify/add/remove properties as Filters actions may modify/add/remove properties as message is selectedmessage is selected
var policy = new RetryPolicy<SqlAzureTransientErrorDetectionStrategy>(MaxRetries, TimeSpan.FromMilliseconds(DelayMs));
policy.ExecuteAction(() => object.DoSomething());