protected virtual async Task <OperateResult> ExecuteSubscribeAsync(CapReceivedMessage receivedMessage) { try { var executeDescriptorGroup = _selector.GetTopicExector(receivedMessage.Name); if (!executeDescriptorGroup.ContainsKey(receivedMessage.Group)) { throw new SubscriberNotFoundException(receivedMessage.Name + " has not been found."); } // If there are multiple consumers in the same group, we will take the first var executeDescriptor = executeDescriptorGroup[receivedMessage.Group][0]; var consumerContext = new ConsumerContext(executeDescriptor, receivedMessage.ToMessageContext()); await _consumerInvokerFactory.CreateInvoker(consumerContext).InvokeAsync(); return(OperateResult.Success); } catch (SubscriberNotFoundException ex) { _logger.LogError("Can not be found subscribe method of name: " + receivedMessage.Name); return(OperateResult.Failed(ex)); } catch (Exception ex) { _logger.ConsumerMethodExecutingFailed($"Group:{receivedMessage.Group}, Topic:{receivedMessage.Name}", ex); return(OperateResult.Failed(ex)); } }
private void ProcessMessage(IServiceScope serviceScope, CapReceivedMessage receivedMessage) { var provider = serviceScope.ServiceProvider; var messageStore = provider.GetRequiredService <ICapMessageStore>(); try { var executeDescriptorGroup = _selector.GetTopicExector(receivedMessage.KeyName); if (executeDescriptorGroup.ContainsKey(receivedMessage.Group)) { messageStore.ChangeReceivedMessageStateAsync(receivedMessage, StatusName.Processing).Wait(); // If there are multiple consumers in the same group, we will take the first var executeDescriptor = executeDescriptorGroup[receivedMessage.Group][0]; var consumerContext = new ConsumerContext(executeDescriptor, receivedMessage.ToMessageContext()); _consumerInvokerFactory.CreateInvoker(consumerContext).InvokeAsync(); messageStore.ChangeReceivedMessageStateAsync(receivedMessage, StatusName.Succeeded).Wait(); } } catch (Exception ex) { _logger.ConsumerMethodExecutingFailed($"Group:{receivedMessage.Group}, Topic:{receivedMessage.KeyName}", ex); } }