Beispiel #1
0
        /// <summary>
        /// 检查该处理程序信息是否存在
        /// </summary>
        public override bool IsHandlerInfoExist(HandlerRecordData handlerInfo)
        {
            if (base.IsHandlerInfoExist(handlerInfo))
            {
                return(true);
            }

            using (var context = _contextFactory.CreateDataContext()) {
                return(IsHandlerInfoExist(context, handlerInfo));
            }
        }
Beispiel #2
0
 private static bool IsHandlerInfoExist(IDataContext context, HandlerRecordData handleInfo)
 {
     try {
         return(context.CreateQuery <HandlerRecordData>()
                .Any(p => p.MessageId == handleInfo.MessageId &&
                     p.MessageTypeCode == handleInfo.MessageTypeCode &&
                     p.HandlerTypeCode == handleInfo.HandlerTypeCode));
     }
     catch (Exception) {
         throw;
     }
 }
Beispiel #3
0
        /// <summary>
        /// 添加处理程序信息
        /// </summary>
        public override void AddHandlerInfo(HandlerRecordData handlerInfo)
        {
            base.AddHandlerInfo(handlerInfo);

            using (var context = _contextFactory.CreateDataContext()) {
                if (IsHandlerInfoExist(context, handlerInfo))
                {
                    return;
                }

                context.Save(handlerInfo);
                context.Commit();
            }
        }
Beispiel #4
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();
                }
            }
        }