Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(service-bus): deprecate service-bus encoding message-context extension #490

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -272,8 +272,7 @@ private async Task<MessageProcessingResult> TryRouteMessageWithPotentialFallback
return MessageProcessingResult.Failure(message.MessageId, CannotFindMatchedHandler, "Failed to process message in the message pump as no message handler is registered in the dependency container");
}

Encoding encoding = messageContext.GetMessageEncodingProperty(Logger);
string messageBody = encoding.GetString(message.Body.ToArray());
string messageBody = LoadMessageBody(message, messageContext);
bool hasGoneThroughMessageHandler = false;

foreach (MessageHandler messageHandler in messageHandlers)
Expand Down Expand Up @@ -335,6 +334,32 @@ private async Task<MessageProcessingResult> TryRouteMessageWithPotentialFallback
}
}

private static string LoadMessageBody(ServiceBusReceivedMessage message, AzureServiceBusMessageContext context)
{
Encoding encoding = DetermineEncoding();
string messageBody = encoding.GetString(message.Body.ToArray());

return messageBody;

Encoding DetermineEncoding()
{
Encoding fallbackEncoding = Encoding.UTF8;

if (context.Properties.TryGetValue(PropertyNames.Encoding, out object encodingNameObj)
&& encodingNameObj is string encodingName
&& !string.IsNullOrWhiteSpace(encodingName))
{
EncodingInfo foundEncoding =
Encoding.GetEncodings()
.FirstOrDefault(e => e.Name.Equals(encodingName, StringComparison.OrdinalIgnoreCase));

return foundEncoding?.GetEncoding() ?? fallbackEncoding;
}

return fallbackEncoding;
}
}

private async Task DeadLetterMessageNoHandlerRegisteredAsync(ServiceBusReceiver messageReceiver, ServiceBusReceivedMessage message, AzureServiceBusMessageContext messageContext)
{
if (messageReceiver != null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ public static class MessageContextExtensions
/// Gets the encoding property value in the messaging context, using UTF-8 as default if no such encoding value can be retrieved.
/// </summary>
/// <param name="messageContext">The context of the message.</param>
[Obsolete("Will be removed in v3.0, please use the " + nameof(PropertyNames.Encoding) + " to extract the encoding yourself from the message context")]
public static Encoding GetMessageEncodingProperty(this MessageContext messageContext)
{
Encoding encoding = GetMessageEncodingProperty(messageContext, NullLogger.Instance);
Expand All @@ -28,6 +29,7 @@ public static Encoding GetMessageEncodingProperty(this MessageContext messageCon
/// </summary>
/// <param name="messageContext">The context of the message.</param>
/// <param name="logger"></param>
[Obsolete("Will be removed in v3.0, please use the " + nameof(PropertyNames.Encoding) + " to extract the encoding yourself from the message context")]
public static Encoding GetMessageEncodingProperty(this MessageContext messageContext, ILogger logger)
{
if (messageContext is null)
Expand Down
Loading