private Task ReadAsync() => Task.Factory.StartNew(() => { foreach (var item in Queue.GetConsumingEnumerable(cts.Token)) { OnMessageReady?.Invoke(this, new KafkaMessageArgs <T>(item)); } });
/// <summary> /// Helper event handler. /// </summary> private async void ReceiveReady(object sender, BasicDeliverEventArgs e) { try { // Converting from Json bytes. var convertedMessage = MessageQueueCommonItems.DeserializeFromJsonBytes <TMessage>(e.Body); var messageReceiveOptions = new RmqMessageReceiveOptions(model, e.DeliveryTag, rabbitMqConfiguration.QueueName, rabbitMqConfiguration.Acknowledgment, ref logger); // Calling handler (async is preferred over sync). if (OnMessageReadyAsync != null) { await OnMessageReadyAsync.Invoke(convertedMessage, messageReceiveOptions); } else { OnMessageReady?.Invoke(convertedMessage, messageReceiveOptions); } } catch (QueueException queueException) { #region Logging - Error logger.Fatal(queueException, queueException.Message); #endregion } catch (Exception ex) { #region Adding Context Data var context = new Dictionary <string, string>(); if (!string.IsNullOrEmpty(rabbitMqConfiguration.ExchangeName)) { context.Add(CommonContextKeys.ExchangeName, rabbitMqConfiguration.ExchangeName); } if (!string.IsNullOrEmpty(rabbitMqConfiguration.RoutingKey)) { context.Add(CommonContextKeys.RoutingKey, rabbitMqConfiguration.RoutingKey); } #endregion MessageQueueCommonItems.PrepareAndLogQueueException( errorCode: QueueErrorCode.FailedToReceiveMessage, message: ErrorMessages.FailedToReceiveMessage, innerException: ex, queueContext: CommonItems.RabbitMqName, queueName: rabbitMqConfiguration.QueueName, address: rabbitMqConfiguration.Address, context: context, logger: logger); } }
/// <summary> /// Helper event handler. /// </summary> private async Task ReceiveReadyAsync(BrokeredMessage brokeredMessage) { try { if (brokeredMessage != null) { // Converting from Json. var convertedMessage = MessageQueueCommonItems.DeserializeFromJson <TMessage>(new StreamReader(brokeredMessage.GetBody <Stream>()).ReadToEnd()); var lockToken = Guid.Empty; // Getting lock token if acknowledgment is configured. if (sbConfiguration.Acknowledgment) { lockToken = brokeredMessage.LockToken; } var messageReceiveOptions = new SbMessageReceiveOptions(lockToken, sbConfiguration.QueueName, sbConfiguration.Acknowledgment, ref acknowledgmentQueueClient, ref logger); // Calling handler (async is preferred over sync). if (OnMessageReadyAsync != null) { await OnMessageReadyAsync.Invoke(convertedMessage, messageReceiveOptions); } else { OnMessageReady?.Invoke(convertedMessage, messageReceiveOptions); } } } catch (QueueException queueException) { #region Logging - Error logger.Fatal(queueException, queueException.Message); #endregion } catch (Exception ex) { MessageQueueCommonItems.PrepareAndLogQueueException( errorCode: QueueErrorCode.FailedToReceiveMessage, message: ErrorMessages.FailedToReceiveMessage, innerException: ex, queueContext: CommonItems.ServiceBusName, queueName: sbConfiguration.QueueName, address: sbConfiguration.Address, logger: logger); } }
/// <summary> /// Helper event handler. /// </summary> private async void ReceiveReady(object sender, NetMQSocketEventArgs e) { try { string receivedMessage; // We need to lock as the sockets are not multi-threaded in ZeroMq. lock (lockForQueueOperation) { // Receiving message. receivedMessage = e.Socket.ReceiveFrameString(); } // Converting from Json. var convertedMessage = MessageQueueCommonItems.DeserializeFromJson <TMessage>(receivedMessage); var messageReceiveOptions = new ZmqMessageReceiveOptions(ref logger); // Calling handler (async is preferred over sync). if (OnMessageReadyAsync != null) { await OnMessageReadyAsync.Invoke(convertedMessage, messageReceiveOptions); } else { OnMessageReady?.Invoke(convertedMessage, messageReceiveOptions); } } catch (QueueException queueException) { #region Logging - Error logger.Fatal(queueException, queueException.Message); #endregion } catch (Exception ex) { MessageQueueCommonItems.PrepareAndLogQueueException( errorCode: QueueErrorCode.FailedToReceiveMessage, message: ErrorMessages.FailedToReceiveMessage, innerException: ex, queueContext: CommonItems.ZeroMqName, address: zmqConfiguration.Address, logger: logger); } }
public void MessageReady(Interfaces.AnalogyLogMessage m) => OnMessageReady?.Invoke(this, new AnalogyLogMessageArgs(m, Environment.MachineName, "", gRPCFactory.Id));