private async Task Consumer_Received(object sender, BasicDeliverEventArgs eventArgs)
        {
            var eventName = eventArgs.RoutingKey;
            var message   = Encoding.UTF8.GetString(eventArgs.Body);

            var integrationEventReceivedArgs = new IntegrationEventReceivedArgs()
            {
                EventName = eventName,
                Message   = message
            };

            try
            {
                await OnEventReceived?.Invoke(this, integrationEventReceivedArgs);
            }

            catch (Exception ex)
            {
                _logger.LogWarning(ex, "----- ERROR Processing message \"{Message}\"", message);
            }

            // Even on exception we take the message off the queue.
            // in a REAL WORLD app this should be handled with a Dead Letter Exchange (DLX).
            // For more information see: https://www.rabbitmq.com/dlx.html
            _consumerChannel.BasicAck(eventArgs.DeliveryTag, multiple: false);
        }
 private void RegisterSubscriptionClientMessageHandler()
 {
     _subscriptionClient.RegisterMessageHandler(
         async(message, token) =>
     {
         var eventName   = $"{message.Label}";
         var messageData = Encoding.UTF8.GetString(message.Body);
         var integrationEventReceivedArgs = new IntegrationEventReceivedArgs()
         {
             EventName = eventName,
             Message   = messageData
         };
         await Task.Run(async() => await(OnEventReceived?.Invoke(this, integrationEventReceivedArgs) ?? Task.CompletedTask));
         await _subscriptionClient.CompleteAsync(message.SystemProperties.LockToken);
     },
         new MessageHandlerOptions(ExceptionReceivedHandler)
     {
         MaxConcurrentCalls = 10, AutoComplete = false
     });
 }
Example #3
0
 public InMemoryEventSubscriber(BlockingCollection <IntegrationEvent> events)
 {
     _events = events;
     Task.Run(async() =>
     {
         foreach (var integrationEvent in _events.GetConsumingEnumerable())
         {
             string eventName = integrationEvent.GetType().Name;
             if (subscriptions.Contains(eventName))
             {
                 var eventArgs = new IntegrationEventReceivedArgs()
                 {
                     EventName = eventName,
                     Message   = JsonConvert.SerializeObject(integrationEvent)
                 };
                 if (OnEventReceived != null)
                 {
                     await OnEventReceived.Invoke(this, eventArgs);
                 }
             }
         }
     });
 }