public ProviderData(IAzureServiceBusInstance busInstance, string lockToken, long sequenceNumber, string markerMessageLockToken)
 {
     this.busInstance            = busInstance;
     LockToken                   = lockToken;
     this.sequenceNumber         = sequenceNumber;
     this.markerMessageLockToken = markerMessageLockToken;
 }
示例#2
0
        private IncomingMessage BuildMessage(Message azureMessage, IList <Message> deferredMessages, IAzureServiceBusInstance busInstance)
        {
            Message markerMessage = null;

            if (azureMessage.IsDeferredMarkerMessage())
            {
                markerMessage = azureMessage;
                azureMessage  = deferredMessages.Single(
                    message => message.SystemProperties.SequenceNumber == markerMessage.DeferredMessageSequenceNumber());
            }

            // TODO Pluggable serialiser
            var messageTypeNamesString = azureMessage.UserProperties[TransportHeaders.MessageTypeNames].ToString();
            // TODO Allocations review
            var messageTypeNames = messageTypeNamesString.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
            var bodyJson         = Encoding.UTF8.GetString(azureMessage.Body);
            var bodyType         = typeMap.GetTypeByName(messageTypeNames[0]);

            var body = JsonConvert.DeserializeObject(bodyJson, bodyType);

            var headers = azureMessage
                          .UserProperties
                          .Where(property => !TransportHeaders.IsTransportHeader(property.Key))
                          .Select(BuildHeader);

            return(new IncomingMessage(
                       id: azureMessage.MessageId,
                       body: body,
                       messageTypeNames: messageTypeNames,
                       dequeuedUtc: DateTime.UtcNow,
                       dequeuedCount: azureMessage.SystemProperties.DeliveryCount,
                       lockExpiresUtc: azureMessage.SystemProperties.LockedUntilUtc,
                       headers: new HeaderCollection(headers),
                       providerData: new ProviderData(
                           busInstance,
                           azureMessage.SystemProperties.LockToken,
                           azureMessage.SystemProperties.SequenceNumber,
                           markerMessage?.SystemProperties.LockToken)));
        }
示例#3
0
        private async Task <IList <Message> > FetchDeferredMessages(IList <Message> originalMessages, IAzureServiceBusInstance busInstance)
        {
            var sequenceNumbers = from originalMessage in originalMessages
                                  where originalMessage.IsDeferredMarkerMessage()
                                  select originalMessage.DeferredMessageSequenceNumber();

            return(await busInstance
                   .ReceiveDeferredMessages(sequenceNumbers)
                   .ConfigureAwait(false));
        }
示例#4
0
 public NoFailoverStrategy(IEnumerable <IAzureServiceBusInstance> busInstances)
 {
     busInstance = busInstances.First();
 }