コード例 #1
0
 public virtual Task OnSubscriberExceptionAsync(ExceptionConsumerContext context)
 {
     _logger.LogError(context.Exception, "An exception occurred when process received message. host: '{0}', client:'{1}' Message:'{2}'.",
                      context.HostAddress,
                      context.ClientOption.ToString(),
                      JsonConvert.SerializeObject(context.Message));
     return(Task.CompletedTask);
 }
コード例 #2
0
        private void RegisterMessageProcessor(IConsumerClient client, IConsumerSubscriber subscriber)
        {
            client.OnMessageReceived += async(sender, transportMessage) =>
            {
                Message message = null;
                try
                {
                    try
                    {
                        message = await _serializer.DeserializeAsync(transportMessage, subscriber.GetMessageType());

                        var context = new ConsumerContext(client.HostAddress, subscriber.ClientOption, message, transportMessage);
                        await _consumerReceiveFilter.OnSubscriberInvokingAsync(context);

                        if (message.Body is null)
                        {
                            throw new MessageBodyNullException();
                        }

                        await subscriber.Invoke(message);
                    }
                    catch (Exception e)
                    {
                        throw new SubscriberInvokeException(e);
                    }
                    client.Commit(sender);
                }
                catch (Exception e)
                {
                    var context = new ExceptionConsumerContext(client.HostAddress, subscriber.ClientOption, message, transportMessage, e);
                    await _consumerReceiveFilter.OnSubscriberExceptionAsync(context);

                    if (subscriber.CommitIfAnyException)
                    {
                        client.Commit(sender);
                    }
                    else
                    {
                        client.Reject(sender);
                    }
                }
            };

            client.OnLog += WriteLog;
        }