コード例 #1
0
ファイル: RmqMessageCreator.cs プロジェクト: rudygt/Paramore
        private static Message FailureMessage(HeaderResult <string> topic, HeaderResult <Guid> messageId)
        {
            var header = new MessageHeader(
                messageId.Success ? messageId.Result : Guid.Empty,
                topic.Success ? topic.Result : string.Empty,
                MessageType.MT_UNACCEPTABLE);
            var message = new Message(header, new MessageBody(string.Empty));

            return(message);
        }
コード例 #2
0
        public Message CreateMessage(BasicDeliverEventArgs fromQueue)
        {
            var headers = fromQueue.BasicProperties.Headers ?? new Dictionary <string, object>();
            var topic   = HeaderResult <string> .Empty();

            var messageId = HeaderResult <Guid> .Empty();

            var timeStamp = HeaderResult <DateTime> .Empty();

            var handledCount = HeaderResult <int> .Empty();

            var delayedMilliseconds = HeaderResult <int> .Empty();

            Message message;

            try
            {
                topic               = ReadTopic(fromQueue, headers);
                messageId           = ReadMessageId(fromQueue.BasicProperties.MessageId);
                timeStamp           = ReadTimeStamp(fromQueue.BasicProperties);
                handledCount        = ReadHandledCount(headers);
                delayedMilliseconds = ReadDelayedMilliseconds(headers);
                var messageType = ReadMessageType(headers);

                if (false == (topic.Success && messageId.Success && messageType.Success && timeStamp.Success && handledCount.Success))
                {
                    message = FailureMessage(topic, messageId);
                }
                else
                {
                    var messageHeader = timeStamp.Success
                        ? new MessageHeader(messageId.Result, topic.Result, messageType.Result, timeStamp.Result, handledCount.Result, delayedMilliseconds.Result)
                        : new MessageHeader(messageId.Result, topic.Result, messageType.Result);

                    message = new Message(messageHeader, new MessageBody(Encoding.UTF8.GetString(fromQueue.Body)));

                    headers.Each(header => message.Header.Bag.Add(header.Key, ParseHeaderValue(header.Value)));
                }
            }
            catch (Exception e)
            {
                _logger.WarnException("Failed to create message from amqp message", e);
                message = FailureMessage(topic, messageId);
            }

            if (headers.ContainsKey(HeaderNames.CORRELATION_ID))
            {
                var correlationId = Encoding.UTF8.GetString((byte[])headers[HeaderNames.CORRELATION_ID]);
                message.Header.CorrelationId = Guid.Parse(correlationId);
            }

            message.SetDeliveryTag(fromQueue.DeliveryTag);

            return(message);
        }
コード例 #3
0
        public Message CreateMessage(BasicDeliverEventArgs fromQueue)
        {
            var headers = fromQueue.BasicProperties.Headers ?? new Dictionary <string, object>();
            var topic   = HeaderResult <string> .Empty();

            var messageId = HeaderResult <Guid> .Empty();

            var timeStamp = HeaderResult <DateTime> .Empty();

            var handledCount = HeaderResult <int> .Empty();

            Message message;

            try
            {
                topic        = ReadTopic(fromQueue, headers);
                messageId    = ReadMessageId(fromQueue.BasicProperties.MessageId);
                timeStamp    = ReadTimeStamp(fromQueue.BasicProperties);
                handledCount = ReadHandledCount(headers);
                var messageType = ReadMessageType(headers);

                if (false == (topic.Success && messageId.Success && messageType.Success && timeStamp.Success && handledCount.Success))
                {
                    message = FailureMessage(topic, messageId);
                }
                else
                {
                    string body = Encoding.UTF8.GetString(fromQueue.Body);

                    message = new Message(
                        timeStamp.Success ? new MessageHeader(messageId.Result, topic.Result, messageType.Result, timeStamp.Result, handledCount.Result) : new MessageHeader(messageId.Result, topic.Result, messageType.Result),
                        new MessageBody(body));

                    headers.Each(header => message.Header.Bag.Add(header.Key, Encoding.UTF8.GetString((byte[])header.Value)));
                }
            }
            catch (Exception e)
            {
                logger.WarnFormat("Failed to create message from amqp message", e);
                message = FailureMessage(topic, messageId);
            }

            message.SetDeliveryTag(fromQueue.DeliveryTag);

            return(message);
        }
コード例 #4
0
        public Message CreateMessage(BasicDeliverEventArgs fromQueue)
        {
            var headers = fromQueue.BasicProperties.Headers;
            var topic   = HeaderResult <string> .Empty();

            var messageId = HeaderResult <Guid> .Empty();

            Message message;

            try
            {
                topic     = ReadTopic(fromQueue, headers);
                messageId = ReadMessageId(headers);
                var messageType = ReadMessageType(headers);

                if (false == (topic.Success && messageId.Success && messageType.Success))
                {
                    message = FailureMessage(topic, messageId);
                }
                else
                {
                    string body = Encoding.UTF8.GetString(fromQueue.Body);

                    message = new Message(
                        new MessageHeader(messageId.Result, topic.Result, messageType.Result),
                        new MessageBody(body));

                    headers.Each(header => message.Header.Bag.Add(header.Key, Encoding.UTF8.GetString((byte[])header.Value)));
                }
            }
            catch (Exception e)
            {
                _logger.Warn("Failed to create message from amqp message", e);
                message = FailureMessage(topic, messageId);
            }

            message.Header.Bag["DeliveryTag"] = fromQueue.DeliveryTag;
            return(message);
        }