问题描述
我正在尝试从服务总线死信队列中提取一条消息,将其克隆并将其发送回原始队列。我正在使用克隆方法,然后在使用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产生true。显然,clone方法存在某种类型的错误,它没有进行深度克隆。
这时我最好的猜测是,我将不得不手动创建消息对象的新副本,而不是依赖克隆操作。