I am trying to resubmit messages from the deadletter queue on a Azure service bus that is configured with a topic queue that has partitioning and duplicate detection enabled.
When I try to add one or more messages I get this error
System.Private.CoreLib: Exception while executing function: Functions.PartstatusResubmitFunction. Azure.Messaging.ServiceBus: Message to a partitioned entity with duplicate detection enabled must have either PartitionKey or MessageId set TrackingId:3dd6017e-c7ea-408e-b167-b5c78cfef8ed_G19,
I tried to give messageId and PartitionKey a new value on but it keeps giving me this error.
I set the MessageId and PartitionKey like this
ServiceBusMessage resubmitMessage = new ServiceBusMessage(dlqMessage);
Random random = new Random();
int randomNumber = random.Next(1, 1000);
resubmitMessage.MessageId = Guid.NewGuid().ToString();
resubmitMessage.PartitionKey = randomNumber.ToString();
This is done from an Azure function, where I use ServiceBusOutput to resubmit the message
[Function(nameof(PartstatusResubmitFunction))]
[ServiceBusOutput("partstatus", EntityType =
ServiceBusEntityType.Topic, Connection = "connectionString")]
public async Task<List<ServiceBusMessage>>
RunAsync([TimerTrigger("%CronTab%")] TimerInfo myTimer)
{
if (myTimer.ScheduleStatus is not null)
{
_logger.LogInformation($"Next timer schedule at:
{myTimer.ScheduleStatus.Next}");
}
var props = await administrationClient.GetSubscriptionRuntimePropertiesAsync("partstatus",
subscriberName.Replace("/$DeadLetterQueue", ""));
activeMessageCount = props.Value.ActiveMessageCount;
List<ServiceBusMessage> result = new List<ServiceBusMessage>();
if (activeMessageCount < 10000)
{
var deadletterCount = await
ProcessDeadLetterMessagesAsync($"topic: partstatus -> subscriber:
{subscriberName}", 10, result);
while (deadletterCount > 0)
{
deadletterCount = await
ProcessDeadLetterMessagesAsync($"topic: partstatus -> subscriber:
{subscriberName}", 10, result);
}
}
else
{
_logger.LogInformation("Not resubmitting messages from
deadletter, ActiveMessageCount: " + activeMessageCount);
}
return result;
}
Thanks
I could resubmit and process the messages from the dead-letter topic of the Azure service bus using below code Azure function.
Code Snippet:
Console output:
Processing multiple Dead-letter messages: