从死信队列克隆的服务总线不起作用
Service Bus Clone from Dead Letter Queue Not Working
我正在尝试从服务总线死信队列中获取一条消息,克隆它并将其发送回原始队列。我正在使用克隆方法,然后在使用 SendAsync 将其发回之前从用户属性中删除死信原因。
我注意到两个问题——当我从新的、克隆的邮件中删除属性时,这些属性也从原始邮件中删除。此外,当我使用 SendAsync 方法时,我从未在任何地方看到新消息。
如有任何帮助,我们将不胜感激。
string fullPath = EntityNameHelper.FormatSubscriptionPath(TopicName, subscriptionName);
var deadLetterClient = new MessageReceiver(ServiceBusConnectionString, fullDeadLetterPath);
var client = new MessageSender(ServiceBusConnectionString, fullPath);
var messages = deadLetterClient.ReceiveAsync(1).Result;
if (messages.Any())
{
var message = messages.First();
var newMessage = message.Clone();
newMessage.UserProperties.Remove("DeadLetterReason");
newMessage.UserProperties.Remove("DeadLetterErrorDescription");
client.SendAsync(newMessage);
}
newMessage.UserProperties == message.UserProperties 为真。显然克隆方法存在某种类型的错误,它没有进行深度克隆。
此时我最好的猜测是我将不得不手动创建消息对象的新副本,而不是依赖于克隆操作。
我正在尝试从服务总线死信队列中获取一条消息,克隆它并将其发送回原始队列。我正在使用克隆方法,然后在使用 SendAsync 将其发回之前从用户属性中删除死信原因。
我注意到两个问题——当我从新的、克隆的邮件中删除属性时,这些属性也从原始邮件中删除。此外,当我使用 SendAsync 方法时,我从未在任何地方看到新消息。
如有任何帮助,我们将不胜感激。
string fullPath = EntityNameHelper.FormatSubscriptionPath(TopicName, subscriptionName);
var deadLetterClient = new MessageReceiver(ServiceBusConnectionString, fullDeadLetterPath);
var client = new MessageSender(ServiceBusConnectionString, fullPath);
var messages = deadLetterClient.ReceiveAsync(1).Result;
if (messages.Any())
{
var message = messages.First();
var newMessage = message.Clone();
newMessage.UserProperties.Remove("DeadLetterReason");
newMessage.UserProperties.Remove("DeadLetterErrorDescription");
client.SendAsync(newMessage);
}
newMessage.UserProperties == message.UserProperties 为真。显然克隆方法存在某种类型的错误,它没有进行深度克隆。
此时我最好的猜测是我将不得不手动创建消息对象的新副本,而不是依赖于克隆操作。