예제 #1
0
        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);
        }
예제 #2
0
        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
            };
        }
예제 #3
0
        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;
            }
        }
예제 #4
0
        public void Send(BadPayloadMessage responseInfo)
        {
            var message = Prepare(responseInfo);

            _producer.TxPublish(message);
        }