private void HandleThreeMessageAsync(MultiMessageDisptaching multiMessageDispatching, IMessageHandlerProxy3 handlerProxy, string handlerTypeName, QueuedHandler <IMessageHandlerProxy3> queueHandler, int retryTimes) { var messages = multiMessageDispatching.Messages; var message1 = messages[0]; var message2 = messages[1]; var message3 = messages[2]; _ioHelper.TryAsyncActionRecursively("HandleThreeMessageAsync", () => handlerProxy.HandleAsync(message1, message2, message3), currentRetryTimes => HandleThreeMessageAsync(multiMessageDispatching, handlerProxy, handlerTypeName, queueHandler, currentRetryTimes), result => { multiMessageDispatching.RemoveHandledHandler(handlerTypeName); if (queueHandler != null) { queueHandler.OnHandlerFinished(handlerProxy); } _logger.DebugFormat("ThreeMessage handled success, [messages:[{0}], handlerType:{1}]", string.Join("|", messages.Select(x => string.Format("id:{0},type:{1}", x.Id, x.GetType().Name))), handlerTypeName); }, () => string.Format("[messages:[{0}], handlerType:{1}]", string.Join("|", messages.Select(x => string.Format("id:{0},type:{1}", x.Id, x.GetType().Name))), handlerProxy.GetInnerObject().GetType().Name), errorMessage => { _logger.Fatal(string.Format("Handle three message has unknown exception, the code should not be run to here, errorMessage: {0}", errorMessage)); }, retryTimes, true); }
private void DispatchThreeMessageToHandlerAsync(MultiMessageDisptaching multiMessageDispatching, IMessageHandlerProxy3 handlerProxy, QueuedHandler <IMessageHandlerProxy3> queueHandler, int retryTimes) { var messages = multiMessageDispatching.Messages; var message1 = messages[0]; var message2 = messages[1]; var message3 = messages[2]; var handlerType = handlerProxy.GetInnerObject().GetType(); var handlerTypeName = _typeNameProvider.GetTypeName(handlerType); var aggregateRootTypeName = message1 is ISequenceMessage ? ((ISequenceMessage)message1).AggregateRootTypeName : null; _ioHelper.TryAsyncActionRecursively <AsyncTaskResult <bool> >("IsThreeMessageRecordExistAsync", () => _messageHandleRecordStore.IsRecordExistAsync(message1.Id, message2.Id, message3.Id, handlerTypeName, aggregateRootTypeName), currentRetryTimes => DispatchThreeMessageToHandlerAsync(multiMessageDispatching, handlerProxy, queueHandler, currentRetryTimes), result => { if (result.Data) { multiMessageDispatching.RemoveHandledHandler(handlerTypeName); if (queueHandler != null) { queueHandler.OnHandlerFinished(handlerProxy); } } else { HandleThreeMessageAsync(multiMessageDispatching, handlerProxy, handlerTypeName, queueHandler, 0); } }, () => string.Format("[messages:[{0}], handlerType:{1}]", string.Join("|", messages.Select(x => string.Format("id:{0},type:{1}", x.Id, x.GetType().Name))), handlerProxy.GetInnerObject().GetType().Name), null, retryTimes, true); }
private void HandleSingleMessageAsync(SingleMessageDisptaching singleMessageDispatching, IMessageHandlerProxy1 handlerProxy, string handlerTypeName, string messageTypeName, QueuedHandler <IMessageHandlerProxy1> queueHandler, int retryTimes) { var message = singleMessageDispatching.Message; _ioHelper.TryAsyncActionRecursively("HandleSingleMessageAsync", () => handlerProxy.HandleAsync(message), currentRetryTimes => HandleSingleMessageAsync(singleMessageDispatching, handlerProxy, handlerTypeName, messageTypeName, queueHandler, currentRetryTimes), result => { singleMessageDispatching.RemoveHandledHandler(handlerTypeName); if (queueHandler != null) { queueHandler.OnHandlerFinished(handlerProxy); } if (_logger.IsDebugEnabled) { _logger.DebugFormat("Message handled success, handlerType:{0}, messageType:{1}, messageId:{2}", handlerTypeName, message.GetType().Name, message.Id); } }, () => string.Format("[messageId:{0}, messageType:{1}, handlerType:{2}]", message.Id, message.GetType().Name, handlerProxy.GetInnerObject().GetType().Name), errorMessage => { _logger.Fatal(string.Format("Handle single message has unknown exception, the code should not be run to here, errorMessage: {0}", errorMessage)); }, retryTimes); }
private void DispatchSingleMessageToHandlerAsync(SingleMessageDisptaching singleMessageDispatching, IMessageHandlerProxy1 handlerProxy, QueuedHandler <IMessageHandlerProxy1> queueHandler, int retryTimes) { var message = singleMessageDispatching.Message; var messageTypeName = _typeNameProvider.GetTypeName(message.GetType()); var handlerType = handlerProxy.GetInnerObject().GetType(); var handlerTypeName = _typeNameProvider.GetTypeName(handlerType); var aggregateRootTypeName = message is ISequenceMessage ? ((ISequenceMessage)message).AggregateRootTypeName : null; _ioHelper.TryAsyncActionRecursively <AsyncTaskResult <bool> >("IsRecordExistAsync", () => _messageHandleRecordStore.IsRecordExistAsync(message.Id, handlerTypeName, aggregateRootTypeName), currentRetryTimes => DispatchSingleMessageToHandlerAsync(singleMessageDispatching, handlerProxy, queueHandler, currentRetryTimes), result => { if (result.Data) { singleMessageDispatching.RemoveHandledHandler(handlerTypeName); if (queueHandler != null) { queueHandler.OnHandlerFinished(handlerProxy); } } else { HandleSingleMessageAsync(singleMessageDispatching, handlerProxy, handlerTypeName, handlerTypeName, queueHandler, 0); } }, () => string.Format("[messageId:{0}, messageType:{1}, handlerType:{2}]", message.Id, message.GetType().Name, handlerType.Name), null, retryTimes, true); }
private void HandleSingleMessageAsync(SingleMessageDisptaching singleMessageDispatching, IMessageHandlerProxy1 handlerProxy, string handlerTypeName, string messageTypeName, QueuedHandler <IMessageHandlerProxy1> queueHandler, int retryTimes) { var message = singleMessageDispatching.Message; _ioHelper.TryAsyncActionRecursivelyWithoutResult("HandleSingleMessageAsync", () => handlerProxy.HandleAsync(message), currentRetryTimes => HandleSingleMessageAsync(singleMessageDispatching, handlerProxy, handlerTypeName, messageTypeName, queueHandler, currentRetryTimes), () => { singleMessageDispatching.RemoveHandledHandler(handlerTypeName); if (queueHandler != null) { queueHandler.OnHandlerFinished(handlerProxy); } _logger.DebugFormat("Message handled success, handlerType:{0}, messageType:{1}, messageId:{2}", handlerTypeName, message.GetType().Name, message.Id); }, () => string.Format("[messageId:{0}, messageType:{1}, handlerType:{2}]", message.Id, message.GetType().Name, handlerProxy.GetInnerObject().GetType().Name), null, retryTimes, true); }
private void HandleTwoMessageAsync(MultiMessageDisptaching multiMessageDispatching, IMessageHandlerProxy2 handlerProxy, string handlerTypeName, QueuedHandler <IMessageHandlerProxy2> queueHandler, int retryTimes) { var messages = multiMessageDispatching.Messages; var message1 = messages[0]; var message2 = messages[1]; _ioHelper.TryAsyncActionRecursivelyWithoutResult("HandleTwoMessageAsync", () => handlerProxy.HandleAsync(message1, message2), currentRetryTimes => HandleTwoMessageAsync(multiMessageDispatching, handlerProxy, handlerTypeName, queueHandler, currentRetryTimes), () => { multiMessageDispatching.RemoveHandledHandler(handlerTypeName); if (queueHandler != null) { queueHandler.OnHandlerFinished(handlerProxy); } _logger.DebugFormat("TwoMessage handled success, [messages:[{0}], handlerType:{1}]", string.Join("|", messages.Select(x => string.Format("id:{0},type:{1}", x.Id, x.GetType().Name))), handlerTypeName); }, () => string.Format("[messages:[{0}], handlerType:{1}]", string.Join("|", messages.Select(x => string.Format("id:{0},type:{1}", x.Id, x.GetType().Name))), handlerProxy.GetInnerObject().GetType().Name), null, retryTimes, true); }
private void AddThreeMessageHandledRecordAsync(MultiMessageDisptaching multiMessageDispatching, ThreeMessageHandleRecord messageHandleRecord, string handlerTypeName, IMessageHandlerProxy3 handlerProxy, QueuedHandler <IMessageHandlerProxy3> queueHandler, int retryTimes) { var messages = multiMessageDispatching.Messages; _ioHelper.TryAsyncActionRecursively <AsyncTaskResult>("AddThreeMessageHandledRecordAsync", () => _messageHandleRecordStore.AddRecordAsync(messageHandleRecord), currentRetryTimes => AddThreeMessageHandledRecordAsync(multiMessageDispatching, messageHandleRecord, handlerTypeName, handlerProxy, queueHandler, currentRetryTimes), result => { multiMessageDispatching.RemoveHandledHandler(handlerTypeName); if (queueHandler != null) { queueHandler.OnHandlerFinished(handlerProxy); } if (_logger.IsDebugEnabled) { _logger.DebugFormat("ThreeMessage handled success, [messages:[{0}], handlerType:{1}]", string.Join("|", messages.Select(x => string.Format("id:{0},type:{1}", x.Id, x.GetType().Name))), handlerProxy.GetInnerObject().GetType().Name); } }, () => string.Format("[messages:[{0}], handlerType:{1}]", string.Join("|", messages.Select(x => string.Format("id:{0},type:{1}", x.Id, x.GetType().Name))), handlerProxy.GetInnerObject().GetType().Name), null, retryTimes, true); }
private void AddMessageHandledRecordAsync(SingleMessageDisptaching singleMessageDispatching, MessageHandleRecord messageHandleRecord, Type handlerType, string handlerTypeName, IMessageHandlerProxy1 handlerProxy, QueuedHandler <IMessageHandlerProxy1> queueHandler, int retryTimes) { var message = singleMessageDispatching.Message; _ioHelper.TryAsyncActionRecursively <AsyncTaskResult>("AddMessageHandledRecordAsync", () => _messageHandleRecordStore.AddRecordAsync(messageHandleRecord), currentRetryTimes => AddMessageHandledRecordAsync(singleMessageDispatching, messageHandleRecord, handlerType, handlerTypeName, handlerProxy, queueHandler, currentRetryTimes), result => { singleMessageDispatching.RemoveHandledHandler(handlerTypeName); if (queueHandler != null) { queueHandler.OnHandlerFinished(handlerProxy); } if (_logger.IsDebugEnabled) { _logger.DebugFormat("Message handled success, handlerType:{0}, messageType:{1}, messageId:{2}", handlerType.Name, message.GetType().Name, message.Id); } }, () => string.Format("[messageId:{0}, messageType:{1}, handlerType:{2}]", message.Id, message.GetType().Name, handlerType.Name), null, retryTimes, true); }