static async void OnIncomingMessage(object sender, IncomingRabbitMqMessageEventArgs ea) { Console.WriteLine($"------> In the event Message='{RabbitMqEndpoint.ConvertMessageToString(ea.Message)}' sent='{ea.MessageSentUtc.ToLocalTime()}'"); var message = RabbitMqEndpoint.ConvertMessageToString(ea.Message); if (ea.RequiresAck) { Console.WriteLine("------> Sending a basic Ack"); await((RabbitMqEndpoint)sender).SendAck(ea.DeliveryTag); } if (ea.IsRpc) { var reply = "Dunno what to say..."; if (message.StartsWith("My name is ")) { var name = message.Replace("My name is ", ""); reply = $"Hello to you, {name}!"; } var me1 = (RabbitMqEndpoint)sender; await me1.ReplyAsync <string>(reply, null); } }
protected virtual async Task OnIncomingMessageAsync(object sender, BasicDeliverEventArgs ea) { await Task.Delay(0, LocalCancellationToken); var ackMode = ((ConsumerParameters)ChannelParameters).AutoAckMode; var isRpc = false; var requiresAck = false; VerboseLoggingHandler.Log($"Event OnIncomingMessageAsync triggered For tag='{ea.DeliveryTag}', exchange='{ea.Exchange}', routingKeyOrTopicName='{ea.RoutingKey}', consumerTag='{ea.ConsumerTag}', deliveryTag='{ea.DeliveryTag}', redelivered='{ea.Redelivered}'"); var messageType = ea.BasicProperties.Type; if (!ea.BasicProperties.IsCorrelationIdPresent()) { var e = new InvalidOperationException($"Missing correlationId in message from exchange={ea.Exchange} deliveryTag=${ea.DeliveryTag}"); VerboseLoggingHandler.Log(e); throw e; } VerboseLoggingHandler.Log($"MessageType='{messageType}'"); if (messageType.Contains(MessageTypeFragmentsRequestAmqAck)) { if (ackMode == ConsumerParameters.AutoAckModeEnum.OnReceipt) { Channel.BasicAck(ea.DeliveryTag, false); } if (ackMode == ConsumerParameters.AutoAckModeEnum.Manual) { requiresAck = true; } } if ((messageType.Contains(MessageTypeFragmentsRequestAck) || messageType.Contains(MessageTypeFragmentsRequestReply) && ea.BasicProperties.IsReplyToPresent())) { isRpc = true; EndpointType = EndpointTypeEnum.RpcConsumer; ReplyToQueueName = ea.BasicProperties.ReplyTo; VerboseLoggingHandler.Log($"Reply requested to '{ReplyToQueueName}'"); if (ea.BasicProperties.IsHeadersPresent()) { VerboseLoggingHandler.Log($"Headers found"); var headers = ea.BasicProperties.Headers; if (headers.ContainsKey(DictionaryKey_PassedQueueTtl)) { var ttl = Convert.ToInt32(headers[DictionaryKey_PassedQueueTtl]); VerboseLoggingHandler.Log($"ttl='{ttl}'"); if (QueueTtlValues.ContainsKey(ReplyToQueueName)) { QueueTtlValues[ReplyToQueueName] = ttl; } else { QueueTtlValues.Add(ReplyToQueueName, ttl); } ea.BasicProperties.Headers.Remove(DictionaryKey_PassedQueueTtl); } } // Handle basic message acknowledgement here. if (messageType.Contains(MessageTypeFragmentsRequestAck) && ConvertMessageToString(ea.Body) == MessageContent_Ping) { VerboseLoggingHandler.Log($"Ack'ing the Ping"); await ReplyAsync(MessageContent_PingResponse, null); } } VerboseLoggingHandler.Log($"Delegate check - does messageType have '{MessageTypeFragmentsRequestReply}'?"); if (messageType.Contains(MessageTypeFragmentsRequestReply)) { VerboseLoggingHandler.Log($"Confirmed. Fire delegate"); var args = new IncomingRabbitMqMessageEventArgs(isRpc, requiresAck, ea); await Task.Run(() => IncomingMessage?.Invoke(this, args), LocalCancellationToken); } }