Exemplo n.º 1
0
        /// <summary>
        /// 处理当前消息。
        /// </summary>
        protected void ProcessHandler(Type messageType, IMessage message, IProxyHandler messageHandler)
        {
            var @event = message as EventStream;
            if (@event != null) {
                messageHandler.Handle(message);
                return;
            }

            if (_logger.IsDebugEnabled)
                _logger.DebugFormat("executing a message. data:{0}",
                    DefaultTextSerializer.Instance.Serialize(message));

            var messageHandlerType = messageHandler.GetInnerHandler().GetType();
            try {
                if (_handlerStore.IsHandlerInfoExist(message.Id, messageType, messageHandlerType)) {
                    if (_logger.IsInfoEnabled)
                        _logger.InfoFormat("The message has been handled. messageHandlerType:{0}, messageType:{1}, messageId:{2}",
                            messageHandlerType.FullName, messageType.FullName, message.Id);
                    return;
                }

                messageHandler.Handle(message);

                if (_logger.IsInfoEnabled)
                    _logger.InfoFormat("Handle message success. messageHandlerType:{0}, messageType:{1}, messageId:{2}",
                        messageHandlerType.FullName, messageType.FullName, message.Id);
            }
            catch (Exception ex) {
                if (_logger.IsErrorEnabled) {
                    string errorMessage = string.Format("Exception raised when {0} handling {1}. message info:{2}.",
                        messageHandlerType.FullName, messageType.FullName, message);
                    _logger.Error(errorMessage, ex);
                }

                throw ex;
            }
            finally {
                _handlerStore.AddHandlerInfo(message.Id, messageType, messageHandlerType);
                using (messageHandler as IDisposable) {
                }

                if (_logger.IsDebugEnabled)
                    _logger.DebugFormat("message executed. messageId:{0}", message.Id);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 处理当前消息。
        /// </summary>
        protected void ProcessHandler(Type messageType, IMessage message, IProxyHandler messageHandler)
        {
            var messageHandlerType = messageHandler.GetInnerHandler().GetType();


            try {
                if (message is EventStream)
                {
                    messageHandler.Handle(message);
                }
                else
                {
                    var messageHandlerTypeCode = _typeCodeProvider.GetTypeCode(messageHandlerType);
                    var messageTypeCode        = _typeCodeProvider.GetTypeCode(messageType);

                    var messageHandlerInfo = new HandlerRecordData(message.Id, messageHandlerTypeCode, messageTypeCode);

                    if (!_handlerStore.IsHandlerInfoExist(messageHandlerInfo))
                    {
                        messageHandler.Handle(message);

                        _handlerStore.AddHandlerInfo(messageHandlerInfo);
                    }

                    _logger.Debug("Handle message success. messageHandlerType:{0}, messageType:{1}, messageId:{2}",
                                  messageHandlerType.FullName, messageType.FullName, message.Id);
                }
            }
            catch (Exception ex) {
                if (!(message is EventStream))
                {
                    string errorMessage = string.Format("Exception raised when {0} handling {1}. message info:{2}.",
                                                        messageHandlerType.FullName, messageType.FullName, message.ToString());
                    _logger.Error(ex, errorMessage);
                }

                throw ex;
            }
            finally {
                if (messageHandler is IDisposable)
                {
                    ((IDisposable)messageHandler).Dispose();
                }
            }
        }