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); }
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; }