예제 #1
0
        private T GetPayload <T>(ServiceBusReceivedMessage serviceBusReceivedMessage, ServiceBusSubscriberReceiveMessageTypes receiveMessageType, CancellationToken cancellationToken = default)
            where T : class
        {
            if (receiveMessageType == ServiceBusSubscriberReceiveMessageTypes.FullMessage)
            {
                return(serviceBusReceivedMessage as T);
            }

            try
            {
                var message = JsonConvert.DeserializeObject(serviceBusReceivedMessage.Body.ToString(), typeof(ServiceBusMessage <T>));
                return(receiveMessageType == ServiceBusSubscriberReceiveMessageTypes.Message
                ? (T)message
                : ((ServiceBusMessage <T>)message)?.Payload);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Service Bus received message get payload failure");
                throw new ServiceBusSubscriberOperationException("Service Bus received message get payload failure", ex);
            }
        }
예제 #2
0
        private object GetPayload(ServiceBusReceivedMessage serviceBusReceivedMessage, ServiceBusSubscriberReceiveMessageTypes receiveMessageType, CancellationToken cancellationToken = default)
        {
            if (receiveMessageType == ServiceBusSubscriberReceiveMessageTypes.FullMessage)
            {
                return(serviceBusReceivedMessage);
            }

            if (!serviceBusReceivedMessage.ApplicationProperties.TryGetValue(nameof(Metadata.EventName), out var eventNameAsObject) ||
                !serviceBusReceivedMessage.ApplicationProperties.TryGetValue(nameof(Metadata.Version), out var versionAsObject))
            {
                return(GetPayload <object>(serviceBusReceivedMessage, receiveMessageType, cancellationToken));
            }

            var eventName = (string)eventNameAsObject;
            var version   = (int)versionAsObject;

            if (!_serviceBusSubscriberConfiguration.DeserializationDictionary.TryGetValue((version, eventName), out var payloadType) ||
                payloadType == null)
            {
                return(GetPayload <object>(serviceBusReceivedMessage, receiveMessageType, cancellationToken));
            }

            try
            {
                var message = JsonConvert.DeserializeObject(serviceBusReceivedMessage.Body.ToString(), payloadType);
                return(receiveMessageType == ServiceBusSubscriberReceiveMessageTypes.Message
                    ? message
                    : message.GetType().GetProperty(nameof(ServiceBusMessage <object> .Payload)).GetValue(message, null));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Service Bus received message get payload failure");
                throw new ServiceBusSubscriberOperationException("Service Bus received message get payload failure", ex);
            }
        }