private Message Prepare(BadPayloadMessage badNewsMessage) { var content = Helpers.Serializer.ToXML <BadPayloadMessage>(badNewsMessage); var message = new Message(content, _contentType); message.CorrelationId = Guid.NewGuid().ToString("N"); message.DeliveryType = DeliveryType.Persistent; message.ProducerId = _appId; message.RoutingKey = "badpayload"; return(message); }
public BadPayloadException(string message, string detail, string payload, StatusCode statusCode) : base(message) { var statusData = new ComplexTypes.ResponseStatus(); statusData.Detail = detail; statusData.Message = message; statusData.StatusCode = statusCode; BadPayloadMessage = new BadPayloadMessage() { RawRequestData = payload, Status = statusData }; }
private void MessageReceivedEvent(object sender, EventArgs e) { IResponseSender responseSender = null; ReceivedMessage message = null; string rawMessageContent = String.Empty; try { message = (e as MessageEventArgs).Message; _log.DebugFormat("{0} Message Received: {1}", _processId, message); rawMessageContent = Helper.ConvertToTextBasedOnEncoding(message.Content, message.MessageContentType); _log.DebugFormat("{0} ReportRequest converted to text: {1}", _processId, rawMessageContent); object reportRequest = Activities.RequestHandler.Deserialize(rawMessageContent); ValidadeRequestData(reportRequest as ReportRequest, rawMessageContent); _log.DebugFormat("{0} ReportRequest deserialized", _processId); var facade = FacadeFactory.Create(reportRequest as ReportRequest); var data = facade.GetIt(reportRequest as ReportRequest); responseSender = ResponseSenderFactory.Create(reportRequest as ReportRequest); if (data == null) { // send 204 no content var response = CreateResponseForNoContentReport(reportRequest as ReportRequest); responseSender.Send(response); return; } var writer = ReportWriterFactory.Create(reportRequest as ReportRequest); //any time the writer finish creating the report, we automatically will send the status to the client writer.ReportCreated += responseSender.Send; writer.Write(data, reportRequest as ReportRequest); _log.DebugFormat("{0} MessageEventArgs", _processId); } catch (BadPayloadException ex) { //in this case, it is not possible to reply to the sender, since the payload has problems //so we will send a message to the async reports exception queue using an //appropriate routing key _log.Error(ex.BadPayloadMessage.Status.Message); _log.Error(ex.BadPayloadMessage.Status.Detail); _log.Error(ex.BadPayloadMessage.RawRequestData); var queueSender = ResponseSenderFactory.Create(ResponseProvider.MessageQueue); queueSender.Send(ex.BadPayloadMessage); } catch (RequestException ex) { _log.Error(ex.ResponseData.Status.Detail, ex); if (responseSender != null) { responseSender.Send(ex.ResponseData); } } catch (Exception ex) { _log.Error("Unknown error", ex); var queueSender = ResponseSenderFactory.Create(ResponseProvider.MessageQueue); var statusData = new ComplexTypes.ResponseStatus(); statusData.Detail = Helpers.Response.AggregateExceptionMessages(ex); statusData.Message = "Unknown Error"; statusData.StatusCode = StatusCode._500_Internal_Server_Error; var badPayloadMessage = new BadPayloadMessage() { RawRequestData = rawMessageContent, Status = statusData }; queueSender.Send(badPayloadMessage); throw ex; } }
public void Send(BadPayloadMessage responseInfo) { var message = Prepare(responseInfo); _producer.TxPublish(message); }