private bool TryGetRequest(ConcurrentQueueingConsumer consumer, out HttpRequestPacket request, out MessageDispatch dispatch) { request = null; dispatch = null; BasicDeliverEventArgs item; if (!consumer.TryInstantDequeue(out item, throwIfClosed: false)) { return(false); } //TODO: Pool MessageDispatch //Get message dispatch = new MessageDispatch { Consumer = consumer, Delivery = item }; //Deserialize message bool wasDeserialized = true; try { request = HttpRequestPacket.Deserialize(item.Body); } catch { wasDeserialized = false; } if (wasDeserialized) { //Add/Update Subscriber-Id header request.Headers[Common.Shared.SUBSCRIBER_ID_HEADER] = this.subscriberIdHeader; //Add redelivered header if item was redelivered. if (item.Redelivered) { request.Headers[Common.Shared.REDELIVERED_HEADER] = TRUE_STRING_ARRAY; } } //Reject message if deserialization failed. else if (!wasDeserialized && Settings.AckBehavior != SubscriberAckBehavior.Automatic) { consumer.Model.BasicReject(item.DeliveryTag, false); return(false); } return(true); }
private bool TryGetRequest(ConcurrentQueueingConsumer consumer, out HttpRequestPacket request, out MessageDispatch dispatch) { request = null; dispatch = null; BasicDeliverEventArgs item; if (!consumer.TryInstantDequeue(out item, throwIfClosed: false)) { return false; } //TODO: Pool MessageDispatch //Get message dispatch = new MessageDispatch { Consumer = consumer, Delivery = item }; //Deserialize message bool wasDeserialized = true; try { request = HttpRequestPacket.Deserialize(item.Body); } catch { wasDeserialized = false; } if (wasDeserialized) { //Add/Update Subscriber-Id header request.Headers[Common.Shared.SUBSCRIBER_ID_HEADER] = this.subscriberIdHeader; //Add redelivered header if item was redelivered. if (item.Redelivered) { request.Headers[Common.Shared.REDELIVERED_HEADER] = TRUE_STRING_ARRAY; } } //Reject message if deserialization failed. else if (!wasDeserialized && Settings.AckBehavior != SubscriberAckBehavior.Automatic ) { consumer.Model.BasicReject(item.DeliveryTag, false); return false; } return true; }