/// <summary> /// Register client for messages /// </summary> protected virtual void RegisterForMessage() { MessageHandlerOptions options = new MessageHandlerOptions(ExceptionReceivedHandler); options.AutoComplete = false; options.MaxConcurrentCalls = 1; CurrentSubscriptionClient.RegisterMessageHandler(MessageReceivedHandler, options); }
/// <summary> /// Handle the received message /// </summary> /// <param name="receivedMessage">message received from service bus</param> /// <param name="token">CanellationToken</param> /// <returns></returns> public async Task MessageReceivedHandler(Message receivedMessage, CancellationToken token) { try { // Process message from subscription. if (receivedMessage.UserProperties.ContainsKey(MessageFactory.MessageModePropertyName)) { var prop = receivedMessage.UserProperties[MessageFactory.MessageModePropertyName]; string propName = Convert.ToString(prop); if (!string.IsNullOrEmpty(propName)) { MessageModes messageMode; bool parsed = Enum.TryParse(propName, out messageMode); if (parsed) { EventMessage msg = null; switch (messageMode) { case MessageModes.Simple: msg = ReaderHandler.GetSimpleMessage(receivedMessage, TypeToDeserialize, MessageDeserializer); MessageReceived(msg, receivedMessage); await CurrentSubscriptionClient.CompleteAsync(receivedMessage.SystemProperties.LockToken); break; case MessageModes.GZip: msg = await ReaderHandler.GetZippedMessage(receivedMessage, TypeToDeserialize, MessageDeserializer); MessageReceived(msg, receivedMessage); await CurrentSubscriptionClient.CompleteAsync(receivedMessage.SystemProperties.LockToken); break; case MessageModes.Chunk: msg = await ReaderHandler.GetChunkedMessage(receivedMessage, ChunkDictionary, TypeToDeserialize, MessageDeserializer); await CurrentSubscriptionClient.CompleteAsync(receivedMessage.SystemProperties.LockToken); if (msg != null) { MessageReceived(msg, receivedMessage); } break; case MessageModes.Storage: msg = await ReaderHandler.GetStoredMessage(receivedMessage, Storage, TypeToDeserialize, MessageDeserializer); MessageReceived(msg, receivedMessage); await CurrentSubscriptionClient.CompleteAsync(receivedMessage.SystemProperties.LockToken); break; default: break; } } } } } catch { await CurrentSubscriptionClient.AbandonAsync(receivedMessage.SystemProperties.LockToken); throw; } }
/// <summary> /// Close the client /// </summary> /// <returns></returns> public async Task CloseAsync() { await CurrentSubscriptionClient.CloseAsync(); }