Azure Functions의 Azure Service Bus 바인딩Azure Service Bus bindings for Azure Functions

이 문서에서는 Azure Functions에서 Azure Service Bus 바인딩을 사용하는 방법을 설명합니다.This article explains how to work with Azure Service Bus bindings in Azure Functions. Azure Functions는 Service Bus 큐 및 토픽에 대한 트리거 및 출력 바인딩을 지원합니다.Azure Functions supports trigger and output bindings for Service Bus queues and topics.

이는 Azure Functions 개발자에 대한 참조 정보입니다.This is reference information for Azure Functions developers. Azure Functions를 처음 접하는 경우 다음 리소스부터 시작합니다.If you're new to Azure Functions, start with the following resources:

패키지 - Functions 1.xPackages - Functions 1.x

Service Bus 바인딩은 Microsoft.Azure.WebJobs.ServiceBus NuGet 패키지 버전 2.x에서 제공됩니다.The Service Bus bindings are provided in the Microsoft.Azure.WebJobs.ServiceBus NuGet package, version 2.x.

다음 표에서는 각 개발 환경에서 이 바인딩에 대한 지원을 추가하는 방법을 보여줍니다.The following table tells how to add support for this binding in each development environment.

개발 환경Development environment 다음에서 지원을 추가하려면To add support in
Functions 1.xFunctions 1.x
로컬 개발 - C# 클래스 라이브러리Local development - C# class library 패키지 설치Install the package
로컬 개발 - C# 스크립트, JavaScript, F #Local development - C# script, JavaScript, F# 자동Automatic
포털 개발Portal development 자동Automatic

패키지 - Functions 2.xPackages - Functions 2.x

Service Bus 바인딩은 Microsoft.Azure.WebJobs.Extensions.ServiceBus NuGet 패키지 버전 3.x에서 제공됩니다.The Service Bus bindings are provided in the Microsoft.Azure.WebJobs.Extensions.ServiceBus NuGet package, version 3.x. 패키지에 대 한 소스 코드는 servicebus GitHub 리포지토리에 있습니다.Source code for the package is in the azure-functions-servicebus-extension GitHub repository.

참고

버전 2.x는 ServiceBusTrigger 인스턴스에 구성 된 토픽 또는 구독을 만들지 않습니다.Version 2.x does not create the topic or subscription configured in the ServiceBusTrigger instance. 2.x 버전은 ServiceBus 를 기반으로 하며 큐 관리를 처리 하지 않습니다.Version 2.x is based on Microsoft.Azure.ServiceBus and does not handle queue management.

다음 표에서는 각 개발 환경에서 이 바인딩에 대한 지원을 추가하는 방법을 보여줍니다.The following table tells how to add support for this binding in each development environment.

개발 환경Development environment 다음에서 지원을 추가하려면To add support in
Functions 2.xFunctions 2.x
로컬 개발 - C# 클래스 라이브러리Local development - C# class library 패키지 설치Install the package
로컬 개발 - C# 스크립트, JavaScript, F#, Java 및 PythonLocal development - C# script, JavaScript, F#, Java and Python 확장 등록Register the extension
포털 개발Portal development 출력 바인딩을 추가할 때 설치Install when adding output binding

함수 앱 프로젝트를 다시 게시하지 않고 포털에서 기존 바인딩 확장을 업데이트하는 방법을 알아보려면 확장 업데이트를 참조하세요.To learn how to update existing binding extensions in the portal without having to republish your function app project, see Update your extensions.

트리거Trigger

Service Bus 트리거를 사용하여 Service Bus 큐 또는 토픽의 메시지에 응답합니다.Use the Service Bus trigger to respond to messages from a Service Bus queue or topic.

트리거 - 예제Trigger - example

언어 관련 예제를 참조하세요.See the language-specific example:

트리거 - C# 예제Trigger - C# example

다음 예제에서는 메시지 메타데이터를 읽고 Service Bus 큐 메시지를 기록하는 C# 함수를 보여줍니다.The following example shows a C# function that reads message metadata and logs a Service Bus queue message:

[FunctionName("ServiceBusQueueTriggerCSharp")]                    
public static void Run(
    [ServiceBusTrigger("myqueue", Connection = "ServiceBusConnection")] 
    string myQueueItem,
    Int32 deliveryCount,
    DateTime enqueuedTimeUtc,
    string messageId,
    ILogger log)
{
    log.LogInformation($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
    log.LogInformation($"EnqueuedTimeUtc={enqueuedTimeUtc}");
    log.LogInformation($"DeliveryCount={deliveryCount}");
    log.LogInformation($"MessageId={messageId}");
}

트리거 - C# 스크립트 예제Trigger - C# script example

다음 예에서는 function.json 파일의 Service Bus 트리거 바인딩 및 바인딩을 사용하는 C# 스크립트 함수를 보여줍니다.The following example shows a Service Bus trigger binding in a function.json file and a C# script function that uses the binding. 함수는 메시지 메타데이터를 읽고 Service Bus 큐 메시지를 기록합니다.The function reads message metadata and logs a Service Bus queue message.

function.json 파일의 바인딩 데이터는 다음과 같습니다.Here's the binding data in the function.json file:

{
"bindings": [
    {
    "queueName": "testqueue",
    "connection": "MyServiceBusConnection",
    "name": "myQueueItem",
    "type": "serviceBusTrigger",
    "direction": "in"
    }
],
"disabled": false
}

C# 스크립트 코드는 다음과 같습니다.Here's the C# script code:

using System;

public static void Run(string myQueueItem,
    Int32 deliveryCount,
    DateTime enqueuedTimeUtc,
    string messageId,
    TraceWriter log)
{
    log.Info($"C# ServiceBus queue trigger function processed message: {myQueueItem}");

    log.Info($"EnqueuedTimeUtc={enqueuedTimeUtc}");
    log.Info($"DeliveryCount={deliveryCount}");
    log.Info($"MessageId={messageId}");
}

트리거 - F# 예제Trigger - F# example

다음 예에서는 function.json 파일의 Service Bus 트리거 바인딩 및 바인딩을 사용하는 F# 함수를 보여줍니다.The following example shows a Service Bus trigger binding in a function.json file and an F# function that uses the binding. 이 함수는 Service Bus 큐 메시지를 기록합니다.The function logs a Service Bus queue message.

function.json 파일의 바인딩 데이터는 다음과 같습니다.Here's the binding data in the function.json file:

{
"bindings": [
    {
    "queueName": "testqueue",
    "connection": "MyServiceBusConnection",
    "name": "myQueueItem",
    "type": "serviceBusTrigger",
    "direction": "in"
    }
],
"disabled": false
}

F# 스크립트 코드는 다음과 같습니다.Here's the F# script code:

let Run(myQueueItem: string, log: ILogger) =
    log.LogInformation(sprintf "F# ServiceBus queue trigger function processed message: %s" myQueueItem)

트리거 - Java 예제Trigger - Java example

다음 Java 함수는 java 함수 런타임 라이브러리@ServiceBusQueueTrigger 주석을 사용 하 여 Service Bus queue 트리거의 구성을 설명 합니다.The following Java function uses the @ServiceBusQueueTrigger annotation from the Java functions runtime library to describe the configuration for a Service Bus queue trigger. 함수는 큐에 배치 된 메시지를 가져와 하 고 로그에 추가 합니다.The function grabs the message placed on the queue and adds it to the logs.

@FunctionName("sbprocessor")
 public void serviceBusProcess(
    @ServiceBusQueueTrigger(name = "msg",
                             queueName = "myqueuename",
                             connection = "myconnvarname") String message,
   final ExecutionContext context
 ) {
     context.getLogger().info(message);
 }

Service Bus 토픽에 메시지가 추가 될 때도 Java 함수를 트리거할 수 있습니다.Java functions can also be triggered when a message is added to a Service Bus topic. 다음 예에서는 @ServiceBusTopicTrigger 주석을 사용 하 여 트리거 구성을 설명 합니다.The following example uses the @ServiceBusTopicTrigger annotation to describe the trigger configuration.

@FunctionName("sbtopicprocessor")
    public void run(
        @ServiceBusTopicTrigger(
            name = "message",
            topicName = "mytopicname",
            subscriptionName = "mysubscription",
            connection = "ServiceBusConnection"
        ) String message,
        final ExecutionContext context
    ) {
        context.getLogger().info(message);
    }

트리거 - JavaScript 예제Trigger - JavaScript example

다음 예에서는 function.json 파일의 Service Bus 트리거 바인딩 및 바인딩을 사용하는 JavaScript 함수를 보여줍니다.The following example shows a Service Bus trigger binding in a function.json file and a JavaScript function that uses the binding. 함수는 메시지 메타데이터를 읽고 Service Bus 큐 메시지를 기록합니다.The function reads message metadata and logs a Service Bus queue message.

function.json 파일의 바인딩 데이터는 다음과 같습니다.Here's the binding data in the function.json file:

{
"bindings": [
    {
    "queueName": "testqueue",
    "connection": "MyServiceBusConnection",
    "name": "myQueueItem",
    "type": "serviceBusTrigger",
    "direction": "in"
    }
],
"disabled": false
}

JavaScript 스크립트 코드는 다음과 같습니다.Here's the JavaScript script code:

module.exports = function(context, myQueueItem) {
    context.log('Node.js ServiceBus queue trigger function processed message', myQueueItem);
    context.log('EnqueuedTimeUtc =', context.bindingData.enqueuedTimeUtc);
    context.log('DeliveryCount =', context.bindingData.deliveryCount);
    context.log('MessageId =', context.bindingData.messageId);
    context.done();
};

트리거 - Python 예제Trigger - Python example

다음 예에서는 트리거를 통해 ServiceBus queue 메시지를 읽는 방법을 보여 줍니다.The following example demonstrates how to read a ServiceBus queue message via a trigger.

ServiceBus 바인딩은 형식이 serviceBusTrigger로 설정 된 함수인 json 에 정의 됩니다.A ServiceBus binding is defined in function.json where type is set to serviceBusTrigger.

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "name": "msg",
      "type": "serviceBusTrigger",
      "direction": "in",
      "queueName": "inputqueue",
      "connection": "AzureServiceBusConnectionString"
    }
  ]
}

_init_py 의 코드는 함수에서 큐 메시지를 읽을 수 있는 func.ServiceBusMessage 매개 변수를 선언 합니다.The code in _init_.py declares a parameter as func.ServiceBusMessage which allows you to read the queue message in your function.

import azure.functions as func

import logging
import json

def main(msg: func.ServiceBusMessage):
    logging.info('Python ServiceBus queue trigger processed message.')

    result = json.dumps({
        'message_id': msg.message_id,
        'body': msg.get_body().decode('utf-8'),
        'content_type': msg.content_type,
        'expiration_time': msg.expiration_time,
        'label': msg.label,
        'partition_key': msg.partition_key,
        'reply_to': msg.reply_to,
        'reply_to_session_id': msg.reply_to_session_id,
        'scheduled_enqueue_time': msg.scheduled_enqueue_time,
        'session_id': msg.session_id,
        'time_to_live': msg.time_to_live,
        'to': msg.to,
        'user_properties': msg.user_properties,
    })

    logging.info(result)

트리거 - 특성Trigger - attributes

C# 클래스 라이브러리에서는 다음 특성을 사용하여 Service Bus 트리거를 구성합니다.In C# class libraries, use the following attributes to configure a Service Bus trigger:

  • ServiceBusTriggerAttributeServiceBusTriggerAttribute

    특성의 생성자는 큐의 이름 또는 토픽과 구독을 사용합니다.The attribute's constructor takes the name of the queue or the topic and subscription. Azure Functions 버전 1.x에서는 연결의 액세스 권한을 지정할 수도 있습니다.In Azure Functions version 1.x, you can also specify the connection's access rights. 액세스 권한을 지정하지 않으면 기본값은 Manage입니다.If you don't specify access rights, the default is Manage. 자세한 내용은 트리거 - 구성 섹션을 참조하세요.For more information, see the Trigger - configuration section.

    문자열 매개 변수와 함께 사용되는 특성을 보여주는 예제는 다음과 같습니다.Here's an example that shows the attribute used with a string parameter:

    [FunctionName("ServiceBusQueueTriggerCSharp")]                    
    public static void Run(
        [ServiceBusTrigger("myqueue")] string myQueueItem, ILogger log)
    {
        ...
    }
    

    다음 예와 같이 사용할 Service Bus 계정을 지정하도록 Connection 속성을 설정할 수 있습니다.You can set the Connection property to specify the Service Bus account to use, as shown in the following example:

    [FunctionName("ServiceBusQueueTriggerCSharp")]                    
    public static void Run(
        [ServiceBusTrigger("myqueue", Connection = "ServiceBusConnection")] 
        string myQueueItem, ILogger log)
    {
        ...
    }
    

    전체 예제는 트리거 - C# 예제를 참조하세요.For a complete example, see Trigger - C# example.

  • ServiceBusAccountAttributeServiceBusAccountAttribute

    사용할 Service Bus 계정을 지정하는 다른 방법을 제공합니다.Provides another way to specify the Service Bus account to use. 생성자는 Service Bus 연결 문자열을 포함하는 앱 설정의 이름을 사용합니다.The constructor takes the name of an app setting that contains a Service Bus connection string. 매개 변수, 메서드 또는 클래스 수준에서 특성을 적용할 수 있습니다.The attribute can be applied at the parameter, method, or class level. 다음 예제에서는 클래스 수준 및 메서드 수준을 보여줍니다.The following example shows class level and method level:

    [ServiceBusAccount("ClassLevelServiceBusAppSetting")]
    public static class AzureFunctions
    {
        [ServiceBusAccount("MethodLevelServiceBusAppSetting")]
        [FunctionName("ServiceBusQueueTriggerCSharp")]
        public static void Run(
            [ServiceBusTrigger("myqueue", AccessRights.Manage)] 
            string myQueueItem, ILogger log)
    {
        ...
    }
    

사용할 Service Bus 계정은 다음과 같은 순서로 결정됩니다.The Service Bus account to use is determined in the following order:

  • ServiceBusTrigger 특성의 Connection 속성The ServiceBusTrigger attribute's Connection property.
  • ServiceBusAccount 특성과 동일한 매개 변수에 적용된 ServiceBusTrigger 특성The ServiceBusAccount attribute applied to the same parameter as the ServiceBusTrigger attribute.
  • 함수에 적용된 ServiceBusAccount 특성The ServiceBusAccount attribute applied to the function.
  • 클래스에 적용된 ServiceBusAccount 특성The ServiceBusAccount attribute applied to the class.
  • "AzureWebJobsServiceBus" 앱 설정입니다.The "AzureWebJobsServiceBus" app setting.

트리거 - 구성Trigger - configuration

다음 표에서는 function.json 파일 및 ServiceBusTrigger 특성에 설정된 바인딩 구성 속성을 설명합니다.The following table explains the binding configuration properties that you set in the function.json file and the ServiceBusTrigger attribute.

function.json 속성function.json property 특성 속성Attribute property 설명Description
typetype 해당 없음n/a "serviceBusTrigger"로 설정해야 합니다.Must be set to "serviceBusTrigger". 이 속성은 사용자가 Azure Portal에서 트리거를 만들 때 자동으로 설정됩니다.This property is set automatically when you create the trigger in the Azure portal.
directiondirection 해당 없음n/a "in"으로 설정해야 합니다.Must be set to "in". 이 속성은 사용자가 Azure Portal에서 트리거를 만들 때 자동으로 설정됩니다.This property is set automatically when you create the trigger in the Azure portal.
namename 해당 없음n/a 함수 코드에서 큐 또는 토픽 메시지를 나타내는 변수의 이름입니다.The name of the variable that represents the queue or topic message in function code. "$return"으로 설정하여 함수 반환 값을 참조합니다.Set to "$return" to reference the function return value.
queueNamequeueName QueueNameQueueName 모니터링할 큐의 이름입니다.Name of the queue to monitor. 토픽이 아닌 큐를 모니터링하는 경우에만 설정합니다.Set only if monitoring a queue, not for a topic.
topicNametopicName TopicNameTopicName 모니터링할 토픽의 이름입니다.Name of the topic to monitor. 큐가 아닌 토픽을 모니터링하는 경우에만 설정합니다.Set only if monitoring a topic, not for a queue.
subscriptionNamesubscriptionName SubscriptionNameSubscriptionName 모니터링할 구독의 이름입니다.Name of the subscription to monitor. 큐가 아닌 토픽을 모니터링하는 경우에만 설정합니다.Set only if monitoring a topic, not for a queue.
연결connection 연결Connection 이 바인딩에 사용할 Service Bus 연결 문자열을 포함하는 앱 설정의 이름입니다.The name of an app setting that contains the Service Bus connection string to use for this binding. 앱 설정 이름이 "AzureWebJobs"로 시작하는 경우 이름의 나머지만을 지정할 수 있습니다.If the app setting name begins with "AzureWebJobs", you can specify only the remainder of the name. 예를 들어 connection을 "MyServiceBus"로 설정한 경우 함수 런타임 기능은 "AzureWebJobsMyServiceBus"라는 앱 설정을 찾습니다.For example, if you set connection to "MyServiceBus", the Functions runtime looks for an app setting that is named "AzureWebJobsMyServiceBus." connection을 비워 두면 함수 런타임 기능은 "AzureWebJobsServiceBus"라는 앱 설정에서 기본 Service Bus 연결 문자열을 사용합니다.If you leave connection empty, the Functions runtime uses the default Service Bus connection string in the app setting that is named "AzureWebJobsServiceBus".

연결 문자열을 얻으려면 관리 자격 증명 가져오기에 나온 단계를 따릅니다.To obtain a connection string, follow the steps shown at Get the management credentials. 연결 문자열은 Service Bus 네임스페이스에 대한 것이어야 하며, 특정 큐 또는 항목으로 제한되지 않습니다.The connection string must be for a Service Bus namespace, not limited to a specific queue or topic.
accessRightsaccessRights 액세스 권한Access 연결 문자열에 대한 액세스 권한입니다.Access rights for the connection string. 사용 가능한 값은 managelisten입니다.Available values are manage and listen. 기본값은 manage이며, connection관리 권한이 있음을 의미합니다.The default is manage, which indicates that the connection has the Manage permission. 관리 권한이 없는 연결 문자열을 사용하는 경우 accessRights을 "listen"으로 설정합니다.If you use a connection string that does not have the Manage permission, set accessRights to "listen". 그렇지 않으면 함수 런타임은 관리 권한이 필요한 작업 시도를 실패할 수 있습니다.Otherwise, the Functions runtime might fail trying to do operations that require manage rights. Azure Functions 버전 2.x에서는 최신 버전의 Storage SDK가 관리 작업을 지원하지 않으므로 이 속성을 사용할 수 없습니다.In Azure Functions version 2.x, this property is not available because the latest version of the Storage SDK doesn't support manage operations.

로컬로 개발하는 경우 앱 설정은 local.settings.json 파일로 이동합니다.When you're developing locally, app settings go into the local.settings.json file.

트리거 - 사용Trigger - usage

C# 및 C# 스크립트에서 큐 또는 토픽 메시지에 대해 다음 매개 변수 형식을 사용할 수 있습니다.In C# and C# script, you can use the following parameter types for the queue or topic message:

  • string - 메시지가 텍스트인 경우string - If the message is text.
  • byte[] - 이진 데이터에 유용합니다.byte[] - Useful for binary data.
  • 사용자 지정 형식 - 메시지에 JSON이 포함된 경우 Azure Functions는 JSON 데이터를 역직렬화하려고 합니다.A custom type - If the message contains JSON, Azure Functions tries to deserialize the JSON data.
  • BrokeredMessage- BrokeredMessage<t > () 메서드를 사용 하 여 deserialize 된 메시지를 제공 합니다.BrokeredMessage - Gives you the deserialized message with the BrokeredMessage.GetBody<T>() method.

이러한 매개 변수는 Azure Functions 버전 1.x용이므로 2.x의 경우 대신 MessageBrokeredMessage를 사용합니다.These parameters are for Azure Functions version 1.x; for 2.x, use Message instead of BrokeredMessage.

JavaScript에서 context.bindings.<name from function.json>를 사용하여 큐 또는 토픽 메시지에 액세스합니다.In JavaScript, access the queue or topic message by using context.bindings.<name from function.json>. Service Bus 메시지가 문자열 또는 JSON 개체로 함수에 전달됩니다.The Service Bus message is passed into the function as either a string or JSON object.

트리거 - 포이즌 메시지Trigger - poison messages

포이즌 메시지 처리는 Azure Functions에서 제어되거나 구성될 수 없습니다.Poison message handling can't be controlled or configured in Azure Functions. Service Bus는 스스로 포이즌 메시지를 처리합니다.Service Bus handles poison messages itself.

트리거 - PeekLock 동작Trigger - PeekLock behavior

Functions 런타임은 PeekLock 모드로 메시지를 수신합니다.The Functions runtime receives a message in PeekLock mode. 함수가 성공적으로 완료된 경우 메시지에서 Complete를 호출하고, 함수가 실패한 경우 Abandon을 호출합니다.It calls Complete on the message if the function finishes successfully, or calls Abandon if the function fails. 함수가 PeekLock 시간 제한보다 오래 실행되는 경우 함수가 실행되면 잠금이 자동으로 갱신됩니다.If the function runs longer than the PeekLock timeout, the lock is automatically renewed as long as the function is running.

maxAutoRenewDurationOnMessageOptions.MaxAutoRenewDuration에 매핑되는 host.json에서 구성할 수 있습니다.The maxAutoRenewDuration is configurable in host.json, which maps to OnMessageOptions.MaxAutoRenewDuration. 이 설정에 대해 허용되는 최대값음 Service Bus 설명서에 따라 5분입니다. 반면 함수 제한 시간 기본값은 5분에서 10분으로 늘릴 수 있습니다.The maximum allowed for this setting is 5 minutes according to the Service Bus documentation, whereas you can increase the Functions time limit from the default of 5 minutes to 10 minutes. Service Bus 함수의 경우 Service Bus 갱신 제한을 초과하기 때문에 이 작업을 하지 않는 것이 좋습니다.For Service Bus functions you wouldn’t want to do that then, because you’d exceed the Service Bus renewal limit.

트리거 - 메시지 메타데이터Trigger - message metadata

Service Bus 트리거는 몇 가지 메타데이터 속성을 제공합니다.The Service Bus trigger provides several metadata properties. 이러한 속성을 다른 바인딩에서 바인딩 식의 일부로 사용하거나 코드에서 매개 변수로 사용할 수 있습니다.These properties can be used as part of binding expressions in other bindings or as parameters in your code. BrokeredMessage 클래스의 속성은 다음과 같습니다.These are properties of the BrokeredMessage class.

속성Property Type 설명Description
DeliveryCount Int32 배달 수입니다.The number of deliveries.
DeadLetterSource string 배달 못한 편지 원본입니다.The dead letter source.
ExpiresAtUtc DateTime 만료 시간(UTC)입니다.The expiration time in UTC.
EnqueuedTimeUtc DateTime 큐에 대기된 시간(UTC)입니다.The enqueued time in UTC.
MessageId string Service Bus에서 중복 메시지를 식별하는 데 사용할 수 있는 사용자 정의 값입니다(설정된 경우).A user-defined value that Service Bus can use to identify duplicate messages, if enabled.
ContentType string 애플리케이션별 논리의 보낸 사람 및 받는 사람에 의해 활용되는 콘텐츠 형식 식별자입니다.A content type identifier utilized by the sender and receiver for application specific logic.
ReplyTo string 큐 주소에 대한 회신입니다.The reply to queue address.
SequenceNumber Int64 Service Bus에 의해 메시지에 할당되는 고유 번호입니다.The unique number assigned to a message by the Service Bus.
To string 주소로 보내기입니다.The send to address.
Label string 애플리케이션별 레이블입니다.The application specific label.
CorrelationId string 상관관계 ID입니다.The correlation ID.

참고

현재 세션 사용 큐와 함께 작동 하는 Service bus 트리거는 미리 보기 상태입니다.Currently, Service bus trigger that works with session enabled queues and subscriptions is in preview. 이 항목에 대 한 추가 업데이트를 위해 이 항목 을 추적 하세요.Please track this item for any further updates regarding this.

이 아티클의 앞부분에서 이러한 속성을 사용하는 코드 예제를 참조하세요.See code examples that use these properties earlier in this article.

출력Output

Azure Service Bus 출력 바인딩을 사용하여 큐 또는 토픽 메시지를 보냅니다.Use Azure Service Bus output binding to send queue or topic messages.

출력 - 예제Output - example

언어 관련 예제를 참조하세요.See the language-specific example:

출력 - C# 예제Output - C# example

다음 예제에서는 Service Bus 큐 메시지를 보내는 C# 함수를 보여줍니다.The following example shows a C# function that sends a Service Bus queue message:

[FunctionName("ServiceBusOutput")]
[return: ServiceBus("myqueue", Connection = "ServiceBusConnection")]
public static string ServiceBusOutput([HttpTrigger] dynamic input, ILogger log)
{
    log.LogInformation($"C# function processed: {input.Text}");
    return input.Text;
}

출력 - C# 스크립트 예제Output - C# script example

다음 예에서는 function.json 파일의 Service Bus 출력 바인딩 및 바인딩을 사용하는 C# 스크립트 함수를 보여줍니다.The following example shows a Service Bus output binding in a function.json file and a C# script function that uses the binding. 함수는 타이머 트리거를 사용하여 15초마다 큐 메시지를 보냅니다.The function uses a timer trigger to send a queue message every 15 seconds.

function.json 파일의 바인딩 데이터는 다음과 같습니다.Here's the binding data in the function.json file:

{
    "bindings": [
        {
            "schedule": "0/15 * * * * *",
            "name": "myTimer",
            "runsOnStartup": true,
            "type": "timerTrigger",
            "direction": "in"
        },
        {
            "name": "outputSbQueue",
            "type": "serviceBus",
            "queueName": "testqueue",
            "connection": "MyServiceBusConnection",
            "direction": "out"
        }
    ],
    "disabled": false
}

단일 메시지를 만드는 C# 스크립트 코드는 다음과 같습니다.Here's C# script code that creates a single message:

public static void Run(TimerInfo myTimer, ILogger log, out string outputSbQueue)
{
    string message = $"Service Bus queue message created at: {DateTime.Now}";
    log.LogInformation(message); 
    outputSbQueue = message;
}

여러 메시지를 만드는 C# 스크립트 코드는 다음과 같습니다.Here's C# script code that creates multiple messages:

public static async Task Run(TimerInfo myTimer, ILogger log, IAsyncCollector<string> outputSbQueue)
{
    string message = $"Service Bus queue messages created at: {DateTime.Now}";
    log.LogInformation(message); 
    await outputSbQueue.AddAsync("1 " + message);
    await outputSbQueue.AddAsync("2 " + message);
}

출력 - F# 예제Output - F# example

다음 예에서는 function.json 파일의 Service Bus 출력 바인딩 및 바인딩을 사용하는 F# 스크립트 함수를 보여줍니다.The following example shows a Service Bus output binding in a function.json file and an F# script function that uses the binding. 함수는 타이머 트리거를 사용하여 15초마다 큐 메시지를 보냅니다.The function uses a timer trigger to send a queue message every 15 seconds.

function.json 파일의 바인딩 데이터는 다음과 같습니다.Here's the binding data in the function.json file:

{
    "bindings": [
        {
            "schedule": "0/15 * * * * *",
            "name": "myTimer",
            "runsOnStartup": true,
            "type": "timerTrigger",
            "direction": "in"
        },
        {
            "name": "outputSbQueue",
            "type": "serviceBus",
            "queueName": "testqueue",
            "connection": "MyServiceBusConnection",
            "direction": "out"
        }
    ],
    "disabled": false
}

단일 메시지를 만드는 F# 스크립트 코드는 다음과 같습니다.Here's F# script code that creates a single message:

let Run(myTimer: TimerInfo, log: ILogger, outputSbQueue: byref<string>) =
    let message = sprintf "Service Bus queue message created at: %s" (DateTime.Now.ToString())
    log.LogInformation(message)
    outputSbQueue = message

출력 - Java 예제Output - Java example

다음 예제에서는 HTTP 요청으로 트리거될 때 myqueue Service Bus 큐에 메시지를 보내는 Java 함수를 보여 줍니다.The following example shows a Java function that sends a message to a Service Bus queue myqueue when triggered by a HTTP request.

@FunctionName("httpToServiceBusQueue")
@ServiceBusQueueOutput(name = "message", queueName = "myqueue", connection = "AzureServiceBusConnection")
public String pushToQueue(
  @HttpTrigger(name = "request", methods = {HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS)
  final String message,
  @HttpOutput(name = "response") final OutputBinding<T> result ) {
      result.setValue(message + " has been sent.");
      return message;
 }

Java 함수 런타임 라이브러리에서 값이 Service Bus 큐에 기록될 함수 매개 변수에 대한 @QueueOutput 주석을 사용합니다.In the Java functions runtime library, use the @QueueOutput annotation on function parameters whose value would be written to a Service Bus queue. 매개 변수 형식은 OutputBinding<T>이어야 합니다. 여기서 T는 POJO의 원시 Java 형식입니다.The parameter type should be OutputBinding<T>, where T is any native Java type of a POJO.

Java 함수는 Service Bus 토픽에도 쓸 수 있습니다.Java functions can also write to a Service Bus topic. 다음 예제에서는 @ServiceBusTopicOutput 주석을 사용 하 여 출력 바인딩에 대 한 구성을 설명 합니다.The following example uses the @ServiceBusTopicOutput annotation to describe the configuration for the output binding.

@FunctionName("sbtopicsend")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
            @ServiceBusTopicOutput(name = "message", topicName = "mytopicname", subscriptionName = "mysubscription", connection = "ServiceBusConnection") OutputBinding<String> message,
            final ExecutionContext context) {
        
        String name = request.getBody().orElse("Azure Functions");

        message.setValue(name);
        return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
        
    }

출력 - JavaScript 예제Output - JavaScript example

다음 예에서는 function.json 파일의 Service Bus 출력 바인딩 및 바인딩을 사용하는 JavaScript 함수를 보여줍니다.The following example shows a Service Bus output binding in a function.json file and a JavaScript function that uses the binding. 함수는 타이머 트리거를 사용하여 15초마다 큐 메시지를 보냅니다.The function uses a timer trigger to send a queue message every 15 seconds.

function.json 파일의 바인딩 데이터는 다음과 같습니다.Here's the binding data in the function.json file:

{
    "bindings": [
        {
            "schedule": "0/15 * * * * *",
            "name": "myTimer",
            "runsOnStartup": true,
            "type": "timerTrigger",
            "direction": "in"
        },
        {
            "name": "outputSbQueue",
            "type": "serviceBus",
            "queueName": "testqueue",
            "connection": "MyServiceBusConnection",
            "direction": "out"
        }
    ],
    "disabled": false
}

단일 메시지를 만드는 JavaScript 스크립트 코드는 다음과 같습니다.Here's JavaScript script code that creates a single message:

module.exports = function (context, myTimer) {
    var message = 'Service Bus queue message created at ' + timeStamp;
    context.log(message);   
    context.bindings.outputSbQueue = message;
    context.done();
};

여러 메시지를 만드는 JavaScript 스크립트 코드는 다음과 같습니다.Here's JavaScript script code that creates multiple messages:

module.exports = function (context, myTimer) {
    var message = 'Service Bus queue message created at ' + timeStamp;
    context.log(message);   
    context.bindings.outputSbQueue = [];
    context.bindings.outputSbQueue.push("1 " + message);
    context.bindings.outputSbQueue.push("2 " + message);
    context.done();
};

출력 - Python 예제Output - Python example

다음 예제에서는 Python에서 ServiceBus 큐에 쓰는 방법을 보여 줍니다.The following example demonstrates how to write out to a ServiceBus queue in Python.

ServiceBue 바인딩 정의는 typeserviceBus로 설정 된 함수인 json 에 정의 되어 있습니다.A ServiceBue binding definition is defined in function.json where type is set to serviceBus.

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "$return"
    },
    {
      "type": "serviceBus",
      "direction": "out",
      "connection": "AzureServiceBusConnectionString",
      "name": "msg",
      "queueName": "outqueue"
    }
  ]
}

__init py에서 set 메서드에 값을 전달 하 여 큐에 메시지를 작성할 수 있습니다.In _init_.py, you can write out a message to the queue by passing a value to the set method.

import azure.functions as func

def main(req: func.HttpRequest, msg: func.Out[str]) -> func.HttpResponse:

    input_msg = req.params.get('message')

    msg.set(input_msg)

    return 'OK'

출력 - 특성Output - attributes

C# 클래스 라이브러리에서 ServiceBusAttribute를 사용합니다.In C# class libraries, use the ServiceBusAttribute.

특성의 생성자는 큐의 이름 또는 토픽과 구독을 사용합니다.The attribute's constructor takes the name of the queue or the topic and subscription. 연결의 액세스 권한을 지정할 수도 있습니다.You can also specify the connection's access rights. 액세스 권한을 설정을 선택하는 방법은 출력 - 구성 섹션에서 설명합니다.How to choose the access rights setting is explained in the Output - configuration section. 함수의 반환 값에 적용된 특성을 보여주는 예제는 다음과 같습니다.Here's an example that shows the attribute applied to the return value of the function:

[FunctionName("ServiceBusOutput")]
[return: ServiceBus("myqueue")]
public static string Run([HttpTrigger] dynamic input, ILogger log)
{
    ...
}

다음 예와 같이 사용할 Service Bus 계정을 지정하도록 Connection 속성을 설정할 수 있습니다.You can set the Connection property to specify the Service Bus account to use, as shown in the following example:

[FunctionName("ServiceBusOutput")]
[return: ServiceBus("myqueue", Connection = "ServiceBusConnection")]
public static string Run([HttpTrigger] dynamic input, ILogger log)
{
    ...
}

전체 예제는 출력 - C# 예제를 참조하세요.For a complete example, see Output - C# example.

ServiceBusAccount 특성을 사용하여 클래스, 메서드 또는 매개 변수 수준에서 사용할 Service Bus 계정을 지정합니다.You can use the ServiceBusAccount attribute to specify the Service Bus account to use at class, method, or parameter level. 자세한 내용은 트리거 - 특성을 참조하세요.For more information, see Trigger - attributes.

출력 - 구성Output - configuration

다음 표에서는 function.json 파일 및 ServiceBus 특성에 설정된 바인딩 구성 속성을 설명합니다.The following table explains the binding configuration properties that you set in the function.json file and the ServiceBus attribute.

function.json 속성function.json property 특성 속성Attribute property 설명Description
typetype 해당 없음n/a "serviceBus"로 설정해야 합니다.Must be set to "serviceBus". 이 속성은 사용자가 Azure Portal에서 트리거를 만들 때 자동으로 설정됩니다.This property is set automatically when you create the trigger in the Azure portal.
directiondirection 해당 없음n/a "out"으로 설정해야 합니다.Must be set to "out". 이 속성은 사용자가 Azure Portal에서 트리거를 만들 때 자동으로 설정됩니다.This property is set automatically when you create the trigger in the Azure portal.
namename 해당 없음n/a 함수 코드에서 큐 또는 토픽을 나타내는 변수의 이름입니다.The name of the variable that represents the queue or topic in function code. "$return"으로 설정하여 함수 반환 값을 참조합니다.Set to "$return" to reference the function return value.
queueNamequeueName QueueNameQueueName 큐의 이름입니다.Name of the queue. 토픽이 아닌 큐 메시지를 보내는 경우에만 설정합니다.Set only if sending queue messages, not for a topic.
topicNametopicName TopicNameTopicName 모니터링할 토픽의 이름입니다.Name of the topic to monitor. 큐가 아닌 토픽 메시지를 보내는 경우에만 설정합니다.Set only if sending topic messages, not for a queue.
연결connection 연결Connection 이 바인딩에 사용할 Service Bus 연결 문자열을 포함하는 앱 설정의 이름입니다.The name of an app setting that contains the Service Bus connection string to use for this binding. 앱 설정 이름이 "AzureWebJobs"로 시작하는 경우 이름의 나머지만을 지정할 수 있습니다.If the app setting name begins with "AzureWebJobs", you can specify only the remainder of the name. 예를 들어 connection을 "MyServiceBus"로 설정한 경우 함수 런타임 기능은 "AzureWebJobsMyServiceBus"라는 앱 설정을 찾습니다.For example, if you set connection to "MyServiceBus", the Functions runtime looks for an app setting that is named "AzureWebJobsMyServiceBus." connection을 비워 두면 함수 런타임 기능은 "AzureWebJobsServiceBus"라는 앱 설정에서 기본 Service Bus 연결 문자열을 사용합니다.If you leave connection empty, the Functions runtime uses the default Service Bus connection string in the app setting that is named "AzureWebJobsServiceBus".

연결 문자열을 얻으려면 관리 자격 증명 가져오기에 나온 단계를 따릅니다.To obtain a connection string, follow the steps shown at Get the management credentials. 연결 문자열은 Service Bus 네임스페이스에 대한 것이어야 하며, 특정 큐 또는 항목으로 제한되지 않습니다.The connection string must be for a Service Bus namespace, not limited to a specific queue or topic.
accessRightsaccessRights 액세스 권한Access 연결 문자열에 대한 액세스 권한입니다.Access rights for the connection string. 사용 가능한 값은 managelisten입니다.Available values are manage and listen. 기본값은 manage이며, connection관리 권한이 있음을 의미합니다.The default is manage, which indicates that the connection has the Manage permission. 관리 권한이 없는 연결 문자열을 사용하는 경우 accessRights을 "listen"으로 설정합니다.If you use a connection string that does not have the Manage permission, set accessRights to "listen". 그렇지 않으면 함수 런타임은 관리 권한이 필요한 작업 시도를 실패할 수 있습니다.Otherwise, the Functions runtime might fail trying to do operations that require manage rights. Azure Functions 버전 2.x에서는 최신 버전의 Storage SDK가 관리 작업을 지원하지 않으므로 이 속성을 사용할 수 없습니다.In Azure Functions version 2.x, this property is not available because the latest version of the Storage SDK doesn't support manage operations.

로컬로 개발하는 경우 앱 설정은 local.settings.json 파일로 이동합니다.When you're developing locally, app settings go into the local.settings.json file.

출력 - 사용Output - usage

Azure Functions 1.x에서 큐가 존재하지 않고 accessRightsmanage로 설정한 경우 런타임은 큐를 만듭니다.In Azure Functions 1.x, the runtime creates the queue if it doesn't exist and you have set accessRights to manage. Functions 버전 2.x에서는 큐 또는 토픽이 이미 있어야 합니다. 존재하지 않는 큐 또는 토픽을 지정하면 함수가 실패합니다.In Functions version 2.x, the queue or topic must already exist; if you specify a queue or topic that doesn't exist, the function will fail.

C# 및 C# 스크립트에서 출력 바인딩에 대해 다음 매개 변수 형식을 사용할 수 있습니다.In C# and C# script, you can use the following parameter types for the output binding:

  • out T paramName - T는 JSON 직렬화 가능 형식일 수 있습니다.out T paramName - T can be any JSON-serializable type. 함수가 종료될 때 매개 변수 값이 null이면 함수는 null 개체와 메시지를 만듭니다.If the parameter value is null when the function exits, Functions creates the message with a null object.
  • out string - 함수가 종료될 때 매개 변수 값이 null인 경우 함수는 메시지를 만들지 않습니다.out string - If the parameter value is null when the function exits, Functions does not create a message.
  • out byte[] - 함수가 종료될 때 매개 변수 값이 null인 경우 함수는 메시지를 만들지 않습니다.out byte[] - If the parameter value is null when the function exits, Functions does not create a message.
  • out BrokeredMessage-함수가 종료 될 때 매개 변수 값이 null 이면 함수는 1. x 함수에 대 한 메시지를 생성 하지 않습니다.out BrokeredMessage - If the parameter value is null when the function exits, Functions does not create a message (for Functions 1.x)
  • out Message-함수가 종료 될 때 매개 변수 값이 null 이면 함수는 2.x 함수에 대해 메시지를 만들지 않습니다.out Message - If the parameter value is null when the function exits, Functions does not create a message (for Functions 2.x)
  • ICollector<T> 또는 IAsyncCollector<T> - 여러 개의 메시지를 만들려는 경우.ICollector<T> or IAsyncCollector<T> - For creating multiple messages. 메시지는 Add 메서드를 호출할 때 생성됩니다.A message is created when you call the Add method.

함수를 사용 C# 하는 경우:When working with C# functions:

  • 비동기 함수에는 out 매개 변수 대신 반환 값 또는 IAsyncCollector 필요 합니다.Async functions need a return value or IAsyncCollector instead of an out parameter.

  • 세션 ID에 액세스 하려면 Message 형식에 바인딩하고 sessionId 속성을 사용 합니다.To access the session ID, bind to a Message type and use the sessionId property.

JavaScript에서 context.bindings.<name from function.json>를 사용하여 큐 또는 토픽에 액세스합니다.In JavaScript, access the queue or topic by using context.bindings.<name from function.json>. 문자열, 바이트 배열 또는 JavaScript 개체 (JSON으로 deserialize)를 context.binding.<name>에 할당할 수 있습니다.You can assign a string, a byte array, or a JavaScript object (deserialized into JSON) to context.binding.<name>.

비C# 언어에서 세션 사용 큐로 메시지를 보내려면 기본 제공 출력 바인딩이 아닌 Azure Service Bus SDK 를 사용 합니다.To send a message to a session-enabled queue in non-C# languages, use the Azure Service Bus SDK rather than the built-in output binding.

예외 및 반환 코드Exceptions and return codes

바인딩Binding 참조Reference
Service BusService Bus Service Bus 오류 코드Service Bus Error Codes
Service BusService Bus Service Bus 한도Service Bus Limits

host.json 설정host.json settings

이 섹션에서는 버전 2.x에서 이 바인딩에 사용할 수 있는 글로벌 구성 설정을 설명합니다.This section describes the global configuration settings available for this binding in version 2.x. 아래 예제 host.json 파일에는 이 바인딩에 대한 버전 2.x 설정만 포함되어 있습니다.The example host.json file below contains only the version 2.x settings for this binding. 버전 2.x의 글로벌 구성 설정에 대한 자세한 내용은 Azure Functions 버전 2.x에 대한 host.json 참조를 참조하세요.For more information about global configuration settings in version 2.x, see host.json reference for Azure Functions version 2.x.

참고

Functions 1.x에서 host.json의 참조는 Azure Functions 1.x에 대한 host.json 참조를 참조하세요.For a reference of host.json in Functions 1.x, see host.json reference for Azure Functions 1.x.

{
    "version": "2.0",
    "extensions": {
        "serviceBus": {
            "prefetchCount": 100,
            "messageHandlerOptions": {
                "autoComplete": false,
                "maxConcurrentCalls": 32,
                "maxAutoRenewDuration": "00:55:00"
            }
        }
    }
}
속성Property 기본값Default 설명Description
maxAutoRenewDurationmaxAutoRenewDuration 00:05:0000:05:00 메시지 잠금이 자동으로 갱신되는 최대 기간입니다.The maximum duration within which the message lock will be renewed automatically.
autoCompleteautoComplete truetrue 트리거에서 즉시 완료(자동 완성)로 표시해야 할지 처리가 완료될 때까지 기다려야 하는지 여부입니다.Whether the trigger should immediately mark as complete (autocomplete) or wait for processing to call complete.
maxConcurrentCallsmaxConcurrentCalls 1616 메시지 펌프가 시작되어야 하는 콜백에 대한 최대 동시 호출 수입니다.The maximum number of concurrent calls to the callback that the message pump should initiate. 기본적으로 함수 런타임은 여러 개의 메시지를 동시에 처리합니다.By default, the Functions runtime processes multiple messages concurrently. 런타임이 큐 또는 토픽 메시지를 한 번에 하나만 처리하도록 하려면, maxConcurrentCalls를 1로 설정합니다.To direct the runtime to process only a single queue or topic message at a time, set maxConcurrentCalls to 1.
prefetchCountprefetchCount 해당 없음n/a 기본 MessageReceiver에서 사용할 기본 PrefetchCount입니다.The default PrefetchCount that will be used by the underlying MessageReceiver.

다음 단계Next steps