Azure Functions Documentation

Service Bus Output Bindings

Service Bus output bindings allow your Azure Function to send messages to Azure Service Bus queues or topics. This is a fundamental pattern for enabling asynchronous communication and decoupling different parts of your application.

Key Benefits:
  • Decoupling: Your function doesn't need to know about the consuming services.
  • Reliability: Service Bus provides robust messaging capabilities.
  • Scalability: Easily handle large volumes of messages.

Binding Configuration

Output bindings are configured in your function's function.json file (for JavaScript, Python, etc.) or via attributes in your code (for C#, F#, Java).

function.json Example (JavaScript/TypeScript)


{
  "bindings": [
    {
      "name": "myQueueTrigger",
      "type": "queueTrigger",
      "direction": "in",
      "queueName": "my-input-queue",
      "connection": "AzureWebJobsStorage"
    },
    {
      "name": "serviceBusMessage",
      "type": "serviceBus",
      "direction": "out",
      "entityType": "queue",
      "queueOrTopicName": "my-output-queue",
      "connection": "ServiceBusConnection"
    }
  ],
  "scriptFile": "index.js"
}
            

C# Example (using Attributes)


using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;

public static class ServiceBusSender
{
    [FunctionName("SendServiceBusMessage")]
    public static void Run(
        [QueueTrigger("my-input-queue")] string myQueueTriggerItem,
        [ServiceBus("my-output-queue", Connection = "ServiceBusConnection")] out string serviceBusMessage,
        ILogger log)
    {
        log.LogInformation($"C# Queue trigger function processed: {myQueueTriggerItem}");

        // Create a message to send to Service Bus
        serviceBusMessage = $"Processed message: {myQueueTriggerItem.ToUpper()}";
        log.LogInformation($"Sending message to Service Bus: {serviceBusMessage}");
    }
}
            

Parameters

Note: For topic subscriptions, you would use entityType: "topic" and provide the queueOrTopicName as the topic name. You can also specify a subscriptionName for more complex scenarios.

Sending Different Message Types

You can send various types of data by changing the type of your output parameter. For example, to send a JSON object:

JavaScript Example


module.exports = async function (context, myQueueTrigger) {
    context.log('JavaScript queue trigger function processed work item', myQueueTrigger);

    const messageObject = {
        id: Date.now(),
        payload: myQueueTrigger.toUpperCase(),
        timestamp: new Date().toISOString()
    };

    // The runtime will automatically serialize JSON objects to strings
    context.bindings.serviceBusMessage = JSON.stringify(messageObject);

    context.log('Sent message to Service Bus:', messageObject);
};
            

C# Example


using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using System;

public class ServiceBusMessageModel
{
    public int Id { get; set; }
    public string Payload { get; set; }
    public DateTime Timestamp { get; set; }
}

public static class ServiceBusSenderComplex
{
    [FunctionName("SendServiceBusObject")]
    public static void Run(
        [QueueTrigger("my-input-queue")] string myQueueTriggerItem,
        [ServiceBus("my-output-topic", Connection = "ServiceBusConnection")] out ServiceBusMessageModel serviceBusMessage,
        ILogger log)
    {
        log.LogInformation($"C# Queue trigger function processed: {myQueueTriggerItem}");

        serviceBusMessage = new ServiceBusMessageModel
        {
            Id = Guid.NewGuid().GetHashCode(), // Simple way to get an int ID
            Payload = $"Data from: {myQueueTriggerItem}",
            Timestamp = DateTime.UtcNow
        };

        log.LogInformation($"Sending object to Service Bus topic.");
    }
}
            

Advanced Scenarios