private object[] DeserializeMessages(Message message) { try { return(messageSerializer.Deserialize(new MemoryStream(message.Data))); } catch (Exception e) { try { logger.Error("Error when serializing message", e); var serializationError = MessageSerializationException; if (serializationError != null) { currentMessageInformation = new RhinoQueueCurrentMessageInformation { Message = message, Source = new Uri(message.Headers["source"]), MessageId = new Guid(message.Headers["id"]), TransportMessageId = message.Id.ToString(), TransportMessage = message, Queue = queue, }; serializationError(currentMessageInformation, e); } } catch (Exception moduleEx) { logger.Error("Error when notifying about serialization exception", moduleEx); } throw; } }
private void ProcessMessage( Message message, TransactionScope tx, Func <CurrentMessageInformation, bool> messageRecieved, Action <CurrentMessageInformation, Exception> messageCompleted, Action <CurrentMessageInformation> beforeTransactionCommit) { Exception ex = null; try { //deserialization errors do not count for module events object[] messages = DeserializeMessages(message); try { var messageId = new Guid(message.Headers["id"]); var source = new Uri(message.Headers["source"]); foreach (var msg in messages) { currentMessageInformation = new RhinoQueueCurrentMessageInformation { AllMessages = messages, Message = msg, Destination = endpoint, MessageId = messageId, Source = source, TransportMessageId = message.Id.ToString(), Queue = queue, TransportMessage = message }; if (TransportUtil.ProcessSingleMessage(currentMessageInformation, messageRecieved) == false) { Discard(currentMessageInformation.Message); } } } catch (Exception e) { ex = e; logger.Error("Failed to process message", e); } } catch (Exception e) { ex = e; logger.Error("Failed to deserialize message", e); } finally { var messageHandlingCompletion = new MessageHandlingCompletion(tx, null, ex, messageCompleted, beforeTransactionCommit, logger, MessageProcessingFailure, currentMessageInformation); messageHandlingCompletion.HandleMessageCompletion(); currentMessageInformation = null; } }
private void ProcessMessage( Message message, TransactionScope tx, Func<CurrentMessageInformation, bool> messageRecieved, Action<CurrentMessageInformation, Exception> messageCompleted) { Exception ex = null; try { //deserialization errors do not count for module events object[] messages = DeserializeMessages(message); try { var messageId = new Guid(message.Headers["id"]); var source = new Uri(message.Headers["source"]); foreach (var msg in messages) { currentMessageInformation = new RhinoQueueCurrentMessageInformation { AllMessages = messages, Message = msg, Destination = endpoint, MessageId = messageId, Source = source, TransportMessageId = message.Id.ToString(), Queue = queue, TransportMessage = message }; if (TransportUtil.ProcessSingleMessage(currentMessageInformation, messageRecieved) == false) Discard(currentMessageInformation.Message); } } catch (Exception e) { ex = e; logger.Error("Failed to process message", e); } } catch (Exception e) { ex = e; logger.Error("Failed to deserialize message", e); } finally { HandleMessageCompletion(message, tx, ex, messageCompleted); currentMessageInformation = null; } }
private object[] DeserializeMessages(Message message) { try { return messageSerializer.Deserialize(new MemoryStream(message.Data)); } catch (Exception e) { try { logger.Error("Error when serializing message", e); var serializationError = MessageSerializationException; if (serializationError != null) { var information = new RhinoQueueCurrentMessageInformation { Message = message, Source = new Uri(message.Headers["from"]), MessageId = new Guid(message.Headers["id"]) }; serializationError(information, e); } } catch (Exception moduleEx) { logger.Error("Error when notifying about serialization exception", moduleEx); } throw; } }
private void ProcessMessage(Message message, TransactionScope tx, Func<CurrentMessageInformation, bool> messageRecieved, Action<CurrentMessageInformation, Exception> messageCompleted, Action<CurrentMessageInformation> beforeTransactionCommit, Action<CurrentMessageInformation> beforeTransactionRollback) { Exception ex = null; try { //deserialization errors do not count for module events #pragma warning disable 420 Interlocked.Increment(ref currentlyProccessingCount); object[] messages = DeserializeMessages(message); try { var messageId = new Guid(message.Headers["id"]); var source = new Uri(message.Headers["source"]); foreach (var msg in messages) { currentMessageInformation = new RhinoQueueCurrentMessageInformation { AllMessages = messages, Message = msg, Destination = endpoint, MessageId = messageId, Source = source, TransportMessageId = message.Id.ToString(), Queue = queue, TransportMessage = message }; if (TransportUtil.ProcessSingleMessage(currentMessageInformation, messageRecieved) == false) Discard(currentMessageInformation.Message); } } catch (Exception e) { ex = e; logger.Error("Failed to process message", e); } } catch (Exception e) { ex = e; logger.Error("Failed to deserialize message", e); } finally { var messageHandlingCompletion = new MessageHandlingCompletion(tx, null, ex, messageCompleted, beforeTransactionCommit, beforeTransactionRollback, logger, MessageProcessingFailure, currentMessageInformation); messageHandlingCompletion.HandleMessageCompletion(); currentMessageInformation = null; Interlocked.Decrement(ref currentlyProccessingCount); #pragma warning restore 420 } }