Пример #1
0
        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));
            }
        }
Пример #2
0
        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);
            }
        }