I’m trying to move ServiceBus triggered message to deadletter queue inside once of the Azure durable function activity.
[FunctionName(nameof(CaviContainerStart))]
public async Task CaviContainerStart(
[ServiceBusTrigger(
topicName: "cavitopic",
subscriptionName: "monitor",
Connection = "ServiceBusConnection"
)]
ServiceBusReceivedMessage message,
[DurableClient] IDurableOrchestrationClient starter){
string messageJson = SerializeMessage(message);
// Function input comes from the request content.
string instanceId = await starter.StartNewAsync(
nameof(CaviContainerOrchestrator), null,
messageJson
);
_logger.LogInformation("Started orchestration with ID = '{instanceId}'.", instanceId);
}
// Convert to JSON
public string SerializeMessage(ServiceBusReceivedMessage message)
{
var messageInfo = new ServiceBusMessageInput
{
MessageId = message.MessageId,
Body = message.Body.ToString, // Convert body to Base64 string
EnqueuedTime = message.EnqueuedTime,
ApplicationProperties = message.ApplicationProperties.ToDictionary(
kvp => kvp.Key,
kvp => (object)kvp.Value // Convert value to object for serialization
),
SequenceNumber = message.SequenceNumber
}; ;
return JsonConvert.SerializeObject(messageInfo);
}
Inside the orchestrator need to deserialize it to ServiceBusReceivedMessage. I’m getting empty ServiceBusReceivedMessage object. Is it a correct way to deserialize it?
[FunctionName(nameof(CaviContainerOrchestrator))]
public async Task CaviContainerOrchestrator(
[OrchestrationTrigger] IDurableOrchestrationContext context
)
{
string messageJson = context.GetInput<string>();
// Deserialize to ServiceBusReceivedMessage
ServiceBusReceivedMessage messageInfo = JsonConvert.DeserializeObject<ServiceBusReceivedMessage>(messageJson);
}
Note: Since message will be deleted from ServiceBus topic once ServiceBus starter function got triggered there is no way to fetch message based on messageid. Inside the durable function to move message to deadletter queue, I guess only way to serialize the object while passing as an input and deserialize it in the orchestrator. It would be helpful to know the way to pass servicebus message as an input to the orchestrator.