Share via

Retrieve Correlation Id of a Service Bus Message in Azure Function

Rahul Baskar 20 Reputation points
Feb 12, 2025, 7:57 PM

A message on an Azure Service Bus queue triggers Azure Function. Receiving simple message and performing a logging activity of the message body is successfull.

But when I want to retrieve Broker Properties like Correlation Id, its resulting in error. Below is how I am trying to fetch Correlation Id and other properties.

Java
package com.function.servicebus;

import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.*;
import com.azure.messaging.servicebus.ServiceBusMessage;
import com.azure.messaging.servicebus.ServiceBusReceivedMessage;

/**
 * Azure Functions with Service Bus Trigger.
 */
public class LoggerServiceBus {
    /**
     * This function will be invoked when a new message is received at the Service Bus Queue.
     */
    @FunctionName("loggerServiceBus")
    public void run(
            //@ServiceBusQueueTrigger(name = "message", queueName = "orders", connection = "AzureServiceBus") String message,
           @ServiceBusQueueTrigger(name = "message", queueName = "orders", connection = "AzureServiceBus") ServiceBusReceivedMessage message,
            final ExecutionContext context
    ) {
        message.getApplicationProperties().toString();
        context.getLogger().info("Java Service Bus Queue trigger function executed.");
        //context.getLogger().info("Data: " + message.getSessionId());
        context.getLogger().info("Received Message: " + message.getBody().toString());
        context.getLogger().info("Message ID: " + message.getMessageId());
        context.getLogger().info("Correlation ID: " + message.getCorrelationId());
        //context.getLogger().info("Content Type: " + message.getContentType());
        //context.getLogger().info("Sequence Number: " + message.getSequenceNumber());

        //message.getApplicationProperties().forEach((key,value) ->
        //context.getLogger().info("Custom Property - " + key + ": " + value)
        //);
    }
}

Azure Service Bus
Azure Service Bus
An Azure service that provides cloud messaging as a service and hybrid integration.
669 questions
Azure Functions
Azure Functions
An Azure service that provides an event-driven serverless compute platform.
5,464 questions
{count} votes

Accepted answer
  1. Sai Prabhu Naveen Parimi 245 Reputation points Microsoft Vendor
    Feb 13, 2025, 12:23 AM

    Rahul Baskar

    Welcome to the Microsoft Q&A Platform!

    Thank you for reaching out. I understand you're having trouble retrieving the Correlation ID in your Azure Function (Service Bus Queue Trigger). This issue occurs because Azure Functions do not support direct binding to ServiceBusReceivedMessage. Instead, you should bind the message as a String and use @BindingName to extract metadata properties.

    Please update your function as follows:

    Java
    package com.function.servicebus;
    
    import com.microsoft.azure.functions.annotation.*;
    import com.microsoft.azure.functions.*;
    import java.util.Map;
    
    /**
     * Azure Functions with Service Bus Trigger.
     */
    public class LoggerServiceBus {
        @FunctionName("loggerServiceBus")
        public void run(
                // CHANGED: Replaced `ServiceBusReceivedMessage` with `String`
                @ServiceBusQueueTrigger(name = "message", queueName = "orders", connection = "AzureServiceBus") String message, // CHANGED
    
                // CHANGED: Added @BindingName to extract broker properties
                @BindingName("MessageId") String messageId, // CHANGED
                @BindingName("CorrelationId") String correlationId, // CHANGED
                @BindingName("ApplicationProperties") Map<String, Object> applicationProperties, // CHANGED
    
                final ExecutionContext context
        ) {
            context.getLogger().info("Java Service Bus Queue trigger function executed.");
            context.getLogger().info("Received Message: " + message);
            context.getLogger().info("Message ID: " + messageId);
            context.getLogger().info("Correlation ID: " + correlationId); // CHANGED
    
            if (applicationProperties != null) {
                applicationProperties.forEach((key, value) -> 
                    context.getLogger().info("Custom Property - " + key + ": " + value)
                );
            }
        }
    }
    
    

0 additional answers

Sort by: Most helpful

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.