当前位置: 首页>>代码示例>>C#>>正文


C# IMessage.Finish方法代码示例

本文整理汇总了C#中IMessage.Finish方法的典型用法代码示例。如果您正苦于以下问题:C# IMessage.Finish方法的具体用法?C# IMessage.Finish怎么用?C# IMessage.Finish使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在IMessage的用法示例。


在下文中一共展示了IMessage.Finish方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: HandleMessage

        public void HandleMessage(IMessage message)
        {
            var messageInformation = new MessageInformation
                                     {
                                         UniqueIdentifier = Guid.NewGuid(),
                                         Topic = _topic,
                                         Channel = _channel,
                                         HandlerType = _handlerType,
                                         MessageType = _messageType,
                                         Message = message,
                                         DeserializedMessageBody = null,
                                         Started = DateTime.UtcNow
                                     };

            _bus.SetCurrentMessageInformation(messageInformation);

            // Get handler
            object handler;
            try
            {
                handler = _objectBuilder.GetInstance(_handlerType);
                messageInformation.HandlerType = handler.GetType();
            }
            catch (Exception ex)
            {
                messageInformation.Finished = DateTime.UtcNow;

                _messageAuditor.TryOnFailed(_logger, _bus,
                    new FailedMessageInformation
                    (
                        messageInformation,
                        FailedMessageQueueAction.Finish,
                        FailedMessageReason.HandlerConstructor,
                        ex
                    )
                );

                message.Finish();
                return;
            }

            // Get deserialized value
            object value;
            try
            {
                value = _serializer.Deserialize(_concreteMessageType, message.Body);
            }
            catch (Exception ex)
            {
                messageInformation.Finished = DateTime.UtcNow;

                _messageAuditor.TryOnFailed(_logger, _bus,
                    new FailedMessageInformation
                    (
                        messageInformation,
                        FailedMessageQueueAction.Finish,
                        FailedMessageReason.MessageDeserialization,
                        ex
                    )
                );

                message.Finish();
                return;
            }

            // Handle message
            messageInformation.DeserializedMessageBody = value;
            _messageAuditor.TryOnReceived(_logger, _bus, messageInformation);

            try
            {
                _handleMethod.Invoke(handler, new[] { value });
            }
            catch (Exception ex)
            {
                bool requeue = (message.Attempts < message.MaxAttempts);

                messageInformation.Finished = DateTime.UtcNow;

                if (requeue)
                    message.Requeue();
                else
                    message.Finish();

                _messageAuditor.TryOnFailed(_logger, _bus,
                    new FailedMessageInformation
                    (
                        messageInformation,
                        requeue ? FailedMessageQueueAction.Requeue : FailedMessageQueueAction.Finish,
                        FailedMessageReason.HandlerException,
                        ex
                    )
                );

                return;
            }

            messageInformation.Finished = DateTime.UtcNow;

            _messageAuditor.TryOnSucceeded(_logger, _bus, messageInformation);
//.........这里部分代码省略.........
开发者ID:yonglehou,项目名称:NsqSharp,代码行数:101,代码来源:MessageDistributor.cs


注:本文中的IMessage.Finish方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。